ó
    æ“–guÓ  ã                   ó  • 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Jr  SSKr	SSK
r	\R                  " S5      rSS jrS rS rS rS	 rS
 rS rS rS r " S S5      rS r " S S5      rSqS rS rS rS rS rS rS r S r!S r"g)zg
This module helps emulate Visual Studio 2008 behavior on top of other
build systems, primarily ninja.
é    N)Ú
OrderedSetz(\\*)"c                 ó  • U R                  S5      S:”  d  U R                  S5      S:”  a  [        R                  R	                  U 5      n U(       a  [
        R                  S U 5      n U R                  SS5      n U(       a  SU  S3$ U $ )z¢Quote a command line argument so that it appears as one argument when
processed via cmd.exe and parsed by CommandLineToArgvW (as is typical for
Windows programs).Ú/r   é   c                 ó0   • SU R                  S5      -  S-   $ )Né   r   ú\")Úgroup)Úmos    Ú4/usr/lib/python3/dist-packages/gyp/msvs_emulation.pyÚ<lambda>Ú!QuoteForRspFile.<locals>.<lambda>)   s   € °!°b·h±h¸q³k±/ÀEÒ2Ió    Ú%z%%Ú")ÚfindÚcountÚosÚpathÚnormpathÚwindows_quoter_regexÚsubÚreplace)ÚargÚ	quote_cmds     r   ÚQuoteForRspFiler      s{   € ð ‡x�x�ƒ}�qÓ˜CŸI™I c›N¨QÓ.Ü�g‰g×Ñ˜sÓ#ˆö
 Ü"×&Ñ&Ñ'IÈ3ÓOˆð �+‰+�c˜4Ó
 €Cö ð �3�%�qˆzÐà€Jr   c                 óL  ^• U (       d  gU S   R                  S5      (       a=  U S   R                  SS5      u  p#US-   [        R                  R	                  U5      -   nO"[        R                  R	                  U S   5      nUS-   SR                  U4S jU SS  5       5      -   $ )z6Process a list of arguments using QuoteCmdExeArgument.Ú r   zcall Ú r   c              3   ó<   >#   • U  H  n[        UT5      v •  M     g 7f©N)r   )Ú.0r   r   s     €r   Ú	<genexpr>Ú$EncodeRspFileList.<locals>.<genexpr>N   s   øé € ÐKÂ(¸3” s¨I×6Ð6Â(ùs   ƒN)Ú
startswithÚsplitr   r   r   Újoin)Úargsr   ÚcallÚprograms    `  r   ÚEncodeRspFileListr+   ?   s–   ø€ ö ØØˆA�w×Ñ˜'×"Ñ"Ø˜Q™Ÿ™ c¨1Ó-‰ˆØ˜‘*œrŸw™w×/Ñ/°Ó8Ñ8‰ä—'‘'×"Ñ" 4¨¡7Ó+ˆØ�c‰MØ�h‰hÔKÀ$ÀqÀrÁ(ÓKÓKñLð Mr   c                 óh   • U (       d  U$ U(       d  U $ [        U R                  US   5      XSS 5      $ )zŒGiven a list of dictionary keys |path| and a tree of dicts |root|, find
value at path, or return |default| if any of the path doesn't exist.r   r   N)Ú_GenericRetrieveÚget)ÚrootÚdefaultr   s      r   r-   r-   Q   s4   € ö ØˆÞØˆÜ˜DŸH™H T¨!¡WÓ-¨w¸Q¸R¸ÓAÐAr   c                 ó~   • U c  U $ [        U [        [        45      (       a  U  Vs/ s H  o!U-   PM	     sn$ X-   $ s  snf )zDAdd |prefix| to |element| or each subelement if element is iterable.)Ú
isinstanceÚlistÚtuple)ÚelementÚprefixÚes      r   Ú
_AddPrefixr8   [   sB   € à�Øˆä�'œD¤%˜=×)Ñ)Ù$+Ó,¢G˜q˜”
¡GÑ,Ð,àÑÐùò -s   ¥:c           	      óâ   • Ubf  U bc  [        U5      (       d  UR                  n[        U [        [        45      (       a$  [        SU  Vs/ s H
  o!" U5      PM     sn5      n U $ U" U 5      n U $ s  snf )z‹If |element| then remap it through |map|. If |element| is iterable then
each item will be remapped. Any elements not found will be removed.N)Úcallabler.   r2   r3   r4   Úfilter)r5   ÚmapÚelems      r   Ú_DoRemappingr>   f   sm   € ð �˜7Ñ.Ü˜�}‰}Ø—'‘'ˆCÜ�g¤¤e˜}×-Ñ-Ü˜T¹'Ó#Bº'°$ C¨¦I¹'Ñ#BÓCˆGð €Nñ ˜'“lˆGØ€Nùò $Cs   ÁA,
c                 ó�   • U bB  Ub?  [        U[        [        45      (       a  U R                  U5        gU R	                  U5        gU$ )z—If |append| is None, simply return |element|. If |append| is not None,
then add |element| to it, adding each item in |element| if it's a list or
tuple.N)r2   r3   r4   ÚextendÚappend)rA   r5   s     r   Ú_AppendOrReturnrB   s   s=   € ð Ñ˜gÑ1Ü�g¤¤e˜}×-Ñ-Ø�M‰M˜'Õ"à�M‰M˜'Õ"àˆr   c                  óÎ  • [        [        S5      (       a  [        R                  $ [        R                  R                  S5      n U (       dŽ  / SQn[        R                  " U[        R                  [        R                  S9nUR                  5       S   R                  S5      nUR                  5        H"  nSU;   d  M  UR                  S5      S	   S
-   n M$     U [        l        U $ )zÐTry to find an installation location for the DirectX SDK. Check for the
standard environment variable, and if that doesn't exist, try to find
via the registry. May return None if not found in either location.Ú	dxsdk_dirÚ	DXSDK_DIR)zreg.exeÚqueryzHKLM\Software\Microsoft\DirectXz/s)ÚstdoutÚstderrr   úutf-8ÚInstallPathz    é   Ú\)ÚhasattrÚ_FindDirectXInstallationrD   r   Úenvironr.   Ú
subprocessÚPopenÚPIPEÚcommunicateÚdecodeÚ
splitlinesr&   )rD   ÚcmdÚprG   Úlines        r   rN   rN   €   s³   € ô
 Ô'¨×5Ñ5Ü'×1Ñ1Ð1ä—
‘
—‘˜{Ó+€IÞâLˆÜ×Ò˜S¬¯©ÄÇÁÑQˆØ—‘“ Ñ#×*Ñ*¨7Ó3ˆØ×%Ñ%Ö'ˆDØ Õ$Ø ŸJ™J vÓ.¨qÑ1°DÑ8’	ñ (ð
 *3ÔÔ&ØÐr   c                 ó8  • 0 nU R                  5       (       aG  U R                  5       US'   [        R                  R                  U R                  5       S5      S-   US'   [	        5       nU(       a  UOSUS'   [        R
                  R                  SS5      US'   U$ )	z‹Get a dict of variables mapping internal VS macro names to their gyp
equivalents. Returns all variables that are independent of the target.z$(VSInstallDir)ÚVCrL   z$(VCInstallDir)r   z$(DXSDK_DIR)ÚWDK_DIRz
$(WDK_DIR))ÚPathr   r   r'   rN   rO   r.   )Ú
vs_versionÚenvrD   s      r   ÚGetGlobalVSMacroEnvr_   —   sˆ   € ð €Cð ‡�×ÑØ!+§¡Ó!2ˆÐÑÜ!#§¡§¡¨j¯o©oÓ.?ÀÓ!FÈÑ!MˆÐÑô
 )Ó*€IÞ'0™)°b€CˆÑô Ÿ
™
Ÿ™ y°"Ó5€CˆÑØ€Jr   c           	      óâ  • [        U S   R                  S/ 5      5      nU SS  H#  nUR                  S/ 5      nU[        U5      -  nM%     U(       d  g[        [        U5      5      n[        U Vs/ s H  n[	        Xe5      PM     sn5      n[        S U 5       5      (       a  gU  H;  nUR                  S/ 5      nU(       d  M  U V	s/ s H  o™U;  d  M
  U	PM     n
n	X£S'   M=     U$ s  snf s  sn	f )zˆFinds msvs_system_include_dirs that are common to all targets, removes
them from all targets, and returns an OrderedSet containing them.r   Úmsvs_system_include_dirsr   Nc              3   ó,   #   • U  H
  nS U;   v •  M     g7f)Ú$N© )r"   Úincludes     r   r#   Ú2ExtractSharedMSVSSystemIncludes.<locals>.<genexpr>º   s   é € Ð
BÒ)A˜gˆ3�'Ž>Ò)Aùó   ‚)r   r.   r_   ÚGetVSVersionÚExpandMacrosÚany)ÚconfigsÚgenerator_flagsÚall_system_includesÚconfigÚsystem_includesr^   re   Úexpanded_system_includesÚincludesÚiÚnew_includess              r   ÚExtractSharedMSVSSystemIncludesrt   ¬   sü   € ô % W¨Q¡Z§^¡^Ð4NÐPRÓ%SÓTÐØ˜!˜"“+ˆØ Ÿ*™*Ð%?ÀÓDˆØ1´J¸Ó4OÑOÒñ ö Øä
œl¨?Ó;Ó
<€CÜ)Ù3FÓGÒ3F¨Œ�gÖ	#Ñ3FÑGó Ðô Ñ
BÑ)AÓ
B×BÑBàó ˆØ—:‘:Ð8¸"Ó=ˆßˆ8á'/ÓP¢x !Ð<OÑ3OŸA¡xˆLÐPØ1=Ð-Ó.ñ ð $Ð#ùò 	Hùò Qs   Á0C'Ã	C,ÃC,c                   ód  • \ rS rSrSrS rS rS4S jrS4S jrS r	S	 r
 " S
 S5      rS rS rS5S jr S5S j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"S# r#S$ r$S% r%S& r&S' r'S( r(S) r)\*RV                  " S*S+S,/5      r,S- r-S. r.S/ r/S0 r0S1 r1S2 r2S3r3g)6ÚMsvsSettingséÈ   zÃA class that understands the gyp 'msvs_...' values (especially the
msvs_settings field). They largely correpond to the VS2008 IDE DOM. This
class helps map those settings to command line options.c           	      óN  • Xl         [        U5      U l        S[        4S[        4S[        4S[        4S[
        4S[
        4S[
        4S[
        4/nUS	   nU HL  u  pV[        X0 5        UR                  5        H'  u  pxUR                  XV" 5       5      [        X5      U'   M)     MN     UR                  S
S/5      U l
        SS/n	/ n
U	 H9  nUR                  5        H"  nXX;   d  M
  U
SR                  XQS   5      /-  n
M$     M;     U
(       a  [        SR                  U
5      5      eg )NÚmsvs_configuration_attributesÚmsvs_settingsra   Úmsvs_disabled_warningsÚmsvs_precompiled_headerÚmsvs_precompiled_sourceÚmsvs_configuration_platformÚmsvs_target_platformÚconfigurationsÚmsvs_cygwin_dirsÚ.Úmsvs_prebuildÚmsvs_postbuildz{} not supported (target {}).Útarget_nameÚ
)Úspecrh   r]   Údictr3   ÚstrÚsetattrÚitemsr.   Úgetattrr�   ÚvaluesÚformatÚ	Exceptionr'   )Úselfr‡   rl   Úsupported_fieldsrk   Úfieldr0   Ú
confignamern   Úunsupported_fieldsÚunsupporteds              r   Ú__init__ÚMsvsSettings.__init__Í   sA  € ØŒ	Ü& Ó7ˆŒð -¬dÐ3ØœdÐ#Ø'¬Ð.Ø%¤tÐ,Ø&¬Ð,Ø&¬Ð,Ø*¬CÐ0Ø#¤SÐ)ð	
Ðð Ð'Ñ(ˆÛ.‰NˆEÜ�D Ô$Ø&-§m¡m¦oÑ"�
Ø39·:±:¸eÀWÃYÓ3O”˜Ó$ ZÓ0ó '6ñ /ð
 !%§¡Ð);¸c¸UÓ CˆÔð Øð
Ðð ˆÛ'ˆEØ!Ÿ.™.Ö*�Ø•?ØØ7×>Ñ>Ø!¨Ñ#6óð$ñ ’Kó +ñ (ö Ü˜DŸI™I kÓ2Ó3Ð3ð r   c                 óº   • U R                   R                  SS5      nU(       a  U$ [        R                  R                  R                  U R                   S   S5      $ )zšReturns the extension for the target, with no leading dot.

Uses 'product_extension' if specified, otherwise uses MSVS defaults based on
the target type.
Úproduct_extensionNÚtyper   )r‡   r.   ÚgypÚMSVSUtilÚTARGET_TYPE_EXT)r�   Úexts     r   ÚGetExtensionÚMsvsSettings.GetExtensionó   sG   € ð �i‰i�m‰mÐ/°Ó6ˆÞØˆJÜ�|‰|×+Ñ+×/Ñ/°·	±	¸&Ñ0AÀ2ÓFÐFr   Nc                 óÌ  • U R                  U5      nUS:X  a  SOUnU R                  R                  SS5      U R                  R                  SU R                  S   5      -   nU(       a  US-   OSnSU R                  5       -   nXW-   nS	S
SUUSU R                  S   UUUU[        R
                  R                  Xh5      S.n	U	R                  [        U R                  5      5        U	$ )zQGet a dict of variables mapping internal VS macro names to their gyp
equivalents.Úx86ÚWin32Úproduct_prefixr   Úproduct_namer…   rL   r‚   z${root}z	${source}z$!INTERMEDIATE_DIR)z$(InputName)z$(InputPath)z	$(IntDir)z
$(OutDir)\z$(PlatformName)z$(ProjectDir)\z$(ProjectName)z$(TargetDir)\z$(TargetExt)z$(TargetFileName)z$(TargetName)z$(TargetPath))
ÚGetArchr‡   r.   rŸ   r   r   r'   Úupdater_   r]   )
r�   Úbase_to_buildrn   Útarget_archÚtarget_platformr…   Ú
target_dirÚ
target_extÚtarget_file_nameÚreplacementss
             r   ÚGetVSMacroEnvÚMsvsSettings.GetVSMacroEnvþ   sæ   € ð —l‘l 6Ó*ˆØ%0°EÓ%9™'¸{ˆØ—i‘i—m‘mÐ$4°bÓ9¸D¿I¹I¿M¹MØ˜DŸI™I mÑ4ó=
ñ 
ˆö .;�] TÒ)Àˆ
Ø˜4×,Ñ,Ó.Ñ.ˆ
Ø&Ñ3Ðð &Ø'Ø-Ø%Ø.Ø!Ø"Ÿi™i¨Ñ6Ø(Ø&Ø!1Ø(ÜŸW™WŸ\™\¨*ÓGñ
ˆð 	×ÑÔ/°·±Ó@ÔAØÐr   c                 ó6   • U R                  X#S9n[        X5      $ )z4Convert from VS macro names to something equivalent.©rn   )r¯   ri   )r�   Úsr¨   rn   r^   s        r   ÚConvertVSMacrosÚMsvsSettings.ConvertVSMacros  s    € à× Ñ  Ð Ð>ˆÜ˜AÓ#Ð#r   c                 ó.  • U Vs/ s H  o"R                  S5      (       a  USS OUPM!     nnU Vs/ s HR  nUR                  5       R                  S5      (       d)  UR                  5       R                  S5      (       d  US-   OUPMT     sn$ s  snf s  snf )z2Strip -l from library if it's specified with that.z-lr   Nz.libz.obj)r%   ÚlowerÚendswith)r�   Ú	librariesÚlibÚlibss       r   ÚAdjustLibrariesÚMsvsSettings.AdjustLibraries   s™   € áDMÓNÂI¸SŸ>™>¨$×/Ñ/��A�B‘°SÒ8ÁIˆÐNñ
 ó	
ò �ð —9‘9“;×'Ñ'¨×/Ñ/¸¿	¹	»×8LÑ8LÈV×8TÑ8Tð �&ŠLàòñ ñ	
ð 	
ùò Oùò
s   …&B±ABc                 ó\   • [        XU5      n[        Xv5      n[        Xt5      n[        XW5      $ )a  Retrieve a value from |field| at |path| or return |default|. If
|append| is specified, and the item is found, it will be appended to that
object instead of returned. If |map| is specified, results will be
remapped through |map| before being returned or appended.)r-   r>   r8   rB   )r�   r’   r   r0   r6   rA   r<   Úresults           r   Ú_GetAndMungeÚMsvsSettings._GetAndMunge*  s/   € ô
 " %°$Ó7ˆÜ˜fÓ*ˆÜ˜FÓ+ˆÜ˜vÓ.Ð.r   c                   ó(   • \ rS rSrSS jrSS jrSrg)ÚMsvsSettings._GetWrapperi4  Nc                 ó8   • Xl         X l        U/U l        X@l        g r!   )Úparentr’   Ú	base_pathrA   )r�   rÅ   r’   rÆ   rA   s        r   r–   Ú!MsvsSettings._GetWrapper.__init__5  s   € Ø ŒKØŒJØ'˜[ˆDŒNØ �Kr   c           	      ó‚   • U R                   R                  U R                  U R                  U/-   UUU R                  US9$ )N)r0   r6   rA   r<   )rÅ   rÀ   r’   rÆ   rA   )r�   Únamer<   r6   r0   s        r   Ú__call__Ú!MsvsSettings._GetWrapper.__call__;  sC   € Ø—;‘;×+Ñ+Ø—
‘
Ø—‘ $ Ñ'ØØØ—{‘{Øð ,ð ð r   )rA   rÆ   r’   rÅ   r!   )Nr   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r–   rÊ   Ú__static_attributes__rd   r   r   Ú_GetWrapperrÃ   4  s   † ô	!÷	r   rÑ   c                 ó°   • U R                   R                  US5      nU R                  R                  US5      nU(       d  UnSSSS.R                  US5      $ )znGet architecture based on msvs_configuration_platform and
msvs_target_platform. Returns either 'x86' or 'x64'.r   r¢   Úx64Úarm64)r£   rÓ   ÚARM64)r~   r.   r   )r�   rn   Úconfiguration_platformÚplatforms       r   r¦   ÚMsvsSettings.GetArchE  sW   € ð "&×!AÑ!A×!EÑ!EÀfÈbÓ!QÐØ×,Ñ,×0Ñ0°¸Ó<ˆÞØ-ˆHà u°wÑ?×CÑCÀHÈeÓTÐTr   c                 ó  • [        U R                  R                  5      S:¼  a  U$ U R                  U5      nUS:X  a  UR	                  S5      (       d  US-  nUS:X  a+  UR	                  S5      (       a  UR                  SS5      S   nU$ )z*Returns the target-specific configuration.iß  rÓ   Ú_x64r¢   Ú_r   r   )Úintr]   Ú
short_namer¦   r¸   Úrsplit)r�   rn   Úarchs      r   Ú_TargetConfigÚMsvsSettings._TargetConfigO  s~   € ô ˆt�‰×)Ñ)Ó*¨dÓ2ØˆMð �|‰|˜FÓ#ˆØ�5‹= §¡°×!8Ñ!8Ø�fÑˆFØ�5‹=˜VŸ_™_¨V×4Ñ4Ø—]‘] 3¨Ó*¨1Ñ-ˆFØˆr   c                 óD   • U R                  U R                  U   XXEU5      $ )z_GetAndMunge for msvs_settings.)rÀ   rz   ©r�   r   rn   r0   r6   rA   r<   s          r   Ú_SettingÚMsvsSettings._Settinga  s)   € à× Ñ Ø×Ñ˜vÑ&¨°vÀsó
ð 	
r   c                 óH   • U R                  U R                  U   UUUUU5      $ )z/_GetAndMunge for msvs_configuration_attributes.)rÀ   ry   rã   s          r   Ú_ConfigAttribÚMsvsSettings._ConfigAttribg  s4   € ð × Ñ Ø×.Ñ.¨vÑ6ØØØØØó
ð 	
r   c                 óÎ   • U R                  U5      nXR                  U   -   nUR                  U R                  SU/ S95        U Vs/ s H  o@R	                  XBS9PM     sn$ s  snf )zuUpdates include_dirs to expand VS specific paths, and adds the system
include dirs used for platform SDK and similar.)ÚVCCLCompilerToolÚAdditionalIncludeDirectories©r0   r²   ©rà   ra   r@   rä   r´   )r�   Úinclude_dirsrn   rq   rW   s        r   ÚAdjustIncludeDirsÚMsvsSettings.AdjustIncludeDirst  st   € ð ×#Ñ# FÓ+ˆØ×"?Ñ"?ÀÑ"GÑGˆØ�‰Ø�M‰MØDÀfÐVXð ð ô	
ñ
 AIÓIÂ¸1×$Ñ$ QÐ$Ó6ÁÑIÐIùÒIó   ÁA"c                 óÎ   • U R                  U5      nXR                  U   -   nUR                  U R                  SU/ S95        U Vs/ s H  o@R	                  XBS9PM     sn$ s  snf )zzUpdates midl_include_dirs to expand VS specific paths, and adds the
system include dirs used for platform SDK and similar.)Ú
VCMIDLToolrë   rì   r²   rí   )r�   Úmidl_include_dirsrn   rq   rW   s        r   ÚAdjustMidlIncludeDirsÚ"MsvsSettings.AdjustMidlIncludeDirs€  st   € ð ×#Ñ# FÓ+ˆØ$×'DÑ'DÀVÑ'LÑLˆØ�‰Ø�M‰MØ>ÀÐPRð ð ô	
ñ
 AIÓIÂ¸1×$Ñ$ QÐ$Ó6ÁÑIÐIùÒIrñ   c                 ó  • U R                  U5      n/ nU R                  S/U5      S:X  a  UR                  S5        U R                  S/U5      S:X  a  UR                  S5        UR                  U R	                  SU/ S95        U$ )z\Returns the set of defines that are injected to the defines list based
on other VS settings.ÚCharacterSetÚ1)Ú_UNICODEÚUNICODEÚ2Ú_MBCS)rê   ÚPreprocessorDefinitionsrì   )rà   rç   r@   rA   rä   )r�   rn   Údefiness      r   ÚGetComputedDefinesÚMsvsSettings.GetComputedDefinesŒ  sŽ   € ð ×#Ñ# FÓ+ˆØˆØ×Ñ˜~Ð.°Ó7¸3Ó>Ø�N‰NÐ2Ô3Ø×Ñ˜~Ð.°Ó7¸3Ó>Ø�N‰N˜7Ô#Ø�‰Ø�M‰MØ?ÀÐQSð ð ô	
ð
 ˆr   c                 óˆ   • U R                  U5      nU R                  SU5      nU(       a  U" U R                  U5      5      nU$ )zrGet the pdb file name that should be used for compiler invocations, or
None if there's no explicit name specified.)rê   ÚProgramDataBaseFileName©rà   rä   r´   )r�   rn   Úexpand_specialÚpdbnames       r   ÚGetCompilerPdbNameÚMsvsSettings.GetCompilerPdbNameœ  sC   € ð ×#Ñ# FÓ+ˆØ—-‘-Ð OÐQWÓXˆÞÙ$ T×%9Ñ%9¸'Ó%BÓCˆGØˆr   c                 ó„   • U R                  U5      nU R                  SU5      nU(       a  U" U R                  X1S95      nU$ )zZGets the explicitly overridden map file name for a target or returns None
if it's not set.)ÚVCLinkerToolÚMapFileNamer²   r  )r�   rn   r  Úmap_files       r   ÚGetMapFileNameÚMsvsSettings.GetMapFileName¥  sE   € ð ×#Ñ# FÓ+ˆØ—=‘=Ð!@À&ÓIˆÞÙ% d×&:Ñ&:¸8Ð&:Ð&SÓTˆHØˆr   c                 óº   • U R                  U5      nU R                  S   nUS:X  a  SOSnU R                  US4U5      nU(       a  U" U R                  XQS95      nU$ )z_Gets the explicitly overridden output name for a target or returns None
if it's not overridden.rš   Ústatic_libraryÚVCLibrarianToolr
  Ú
OutputFiler²   )rà   r‡   rä   r´   )r�   rn   r  rš   r/   Úoutput_files         r   ÚGetOutputNameÚMsvsSettings.GetOutputName®  sm   € ð ×#Ñ# FÓ+ˆØ�y‰y˜Ñ ˆØ$(Ð,<Ó$<Ñ À.ˆà—m‘m T¨<Ð$8¸&ÓAˆÞÙ(Ø×$Ñ$ [Ð$Ð@óˆKð Ðr   c                 ó¶   • U R                  U5      nU R                  SU5      nU R                  SU5      nUS:X  a  U(       a  U" U R                  XAS95      $ U$ g)zGets the explicitly overridden pdb name for a target or returns
default if it's not overridden, or if no pdb will be generated.)r
  ÚProgramDatabaseFile)r
  ÚGenerateDebugInformationÚtruer²   Nr  )r�   rn   r  r0   r  Úgenerate_debug_infos         r   Ú
GetPDBNameÚMsvsSettings.GetPDBName¼  sg   € ð ×#Ñ# FÓ+ˆØ—m‘mÐ$KÈVÓTˆØ"Ÿm™mØ8¸&ó
Ðð  &Ó(ÞÙ% d×&:Ñ&:¸;Ð&:Ð&VÓWÐWà�àr   c                 óR   • U R                  U5      nU R                  SU5      nUS:H  $ )zXIf NoImportLibrary: true, ninja will not expect the output to include
an import library.)ÚNoImportLibraryr  ©rà   rä   )r�   rn   Únoimplibs      r   ÚGetNoImportLibraryÚMsvsSettings.GetNoImportLibraryÌ  s0   € ð ×#Ñ# FÓ+ˆØ—=‘=Ð!5°vÓ>ˆØ˜6Ñ!Ð!r   c                 ó~   • U R                  U5      n/ nU R                  SU5      nUS:X  a  UR                  S5        U$ )z:Returns the flags that need to be added to ml invocations.)ÚMASMÚUseSafeExceptionHandlersr  z/safeseh)rà   rä   rA   )r�   rn   ÚasmflagsÚsafesehs       r   ÚGetAsmflagsÚMsvsSettings.GetAsmflagsÓ  sA   € à×#Ñ# FÓ+ˆØˆØ—-‘-Ð DÀfÓMˆØ�fÓØ�O‰O˜JÔ'Øˆr   c           	      ó6  • U R                  U5      n/ nUR                  U R                  U    Vs/ s H  nSU-   PM
     sn5        U R                  X R                  U   SUS9nU" SSSSSS	.S
SS9  U" SSS9  U" SSS9  U" SSS0S9  U" SSS0S9  U" SSSS.SS9  U" SSSS.SS9  U" SSS S!.S
S9  U" S"S#S$S%S&.S'S(S9  U" S)SS*S.S9  U" S+SS,0S9  U" S-S.S9  U" S/SS00S9  U" S1SS2S3S4S	.S5S9  U" S6S7S8S9S:.S;S9  U" S<S=S>S?.S9  U" S@SASBS?.S9  U" SCSSD0S9  U" SESFSGS?.S9  U" SHS SISSJ.SKS9  U" SLSMSNSOSPS	.SQS9  U" SRSSSTS!.SUS9  U" SVSSW0S9  U" SXSSS.SYS9  U" SZSS[0S9  U" S\SS9  U" S]S^S_S`SaSbSc.SdS9  UR                  U R                  SeU/ Sf9 Vs/ s H  nSgU-   PM
     sn5        [        U R                  R                  5      Sh:¼  a  UR                  Si5        U Vs/ s H  ofR                  Sj5      (       a  M  UPM     nnU$ s  snf s  snf s  snf )kzCReturns the flags that need to be added to .c and .cc compilations.z/wdrê   ©rA   ÚOptimizationÚdrù   rü   Úx)Ú0rù   rü   Ú3z/O©r<   r6   r0   ÚInlineFunctionExpansionz/Ob©r6   ÚDisableSpecificWarningsÚStringPoolingr  z/GF©r<   ÚEnableFiberSafeOptimizationsz/GTÚOmitFramePointersÚ-r   ©Úfalser  z/Oy©r<   r6   ÚEnableIntrinsicFunctionsz/OiÚFavorSizeOrSpeedÚtr³   ©rù   rü   ÚFloatingPointModelÚpreciseÚstrictÚfast©r/  rù   rü   z/fp:r/  ÚCompileAsManagedz/clrÚWholeProgramOptimizationz/GLÚWarningLevelz/WÚWarnAsErrorú/WXÚCallingConventionÚrÚzÚvz/GÚDebugInformationFormatÚ7rr   ÚI)rù   r0  Ú4z/ZÚRuntimeTypeInfoz/GRz/GR-©r  r;  ÚEnableFunctionLevelLinkingz/Gyz/Gy-ÚMinimalRebuildz/GmÚBufferSecurityCheckz/GSz/GS-ÚBasicRuntimeChecksÚu)rù   rü   r0  z/RTCÚRuntimeLibraryÚTÚTdÚDÚDdz/MÚExceptionHandlingÚscÚaz/EHÚDefaultCharIsUnsignedz/JÚTreatWChar_tAsBuiltInTypez/Zc:wchar_tÚEnablePREfastz/analyzeÚAdditionalOptionsÚEnableEnhancedInstructionSetÚSSEÚSSE2ÚAVXÚIA32ÚAVX2)rù   rü   r0  rR  Ú5z/arch:)rê   ÚForcedIncludeFilesrì   ú/FIg      (@z/FSz/MP)rà   r@   r{   rÑ   rz   rä   Úfloatr]   Úproject_versionrA   r%   )r�   rn   ÚcflagsÚwÚclÚfr.  s          r   Ú	GetCflagsÚMsvsSettings.GetCflagsÜ  sý  € à×#Ñ# FÓ+ˆØˆØ�‰¨$×*EÑ*EÀfÒ*MÓNÒ*M Q�u˜q”yÑ*MÑNÔOØ×ÑØ×$Ñ$ VÑ,Ð.@Èð ð 
ˆñ 	ØØ ¨#°CÑ8ØØò		
ñ 	Ð$¨UÒ3Ù
Ð$¨UÒ3Ù
ˆ? ¨ Ò0Ù
Ð)°¸¨Ò?Ù
Ð¨c¸2Ñ$>ÀuÒMÙ
Ð%°SÀ"Ñ+EÈeÒTÙ
Ð¨°3Ñ#7ÀÒEÙ
Ø Ø h°VÑ<ØØò		
ñ 	Ð¨R¸Ñ#@ÒAÙ
Ð%¨F°E¨?Ò;Ù
ˆ> $Ò'Ù
ˆ=˜v u˜oÒ.Ù
ØØ ¨#°CÑ8Øò	
ñ
 	Ð#¨s¸À3Ñ)GÐPTÒUÙ
Ð¨5¸6Ñ"BÒCÙ
Ð'°eÀfÑ-MÒNÙ
Ð &¨% Ò1Ù
Ð ¨u¸vÑ&FÒGÙ
Ð¨3°S¸sÑ%CÈFÒSÙ
ØØ ¨3°TÑ:Øò	
ñ
 	Ð¨$°SÑ$9À%ÒHÙ
Ð"¨°¨Ò7Ù
Ø'Ø rÑ*Ø ò	
ñ
 	ˆ? ¨Ð 4Ò5Ù
Ð rÒ*Ù
Ø*Ø &¨u¸6ÈÑOØò	
ð
 	�‰ð Ÿ™Ø>ÀÐPRð 'ñ óò�Að ˜”	ññô	
ô �—‘×0Ñ0Ó1°TÓ9ð �M‰M˜%Ô á#Ó?šV˜¯<©<¸×+>—!™VˆÐ?ØˆùòQ Oùòtùò @s   °HÆHÇ%HÈHc                 óR  • U R                  U5      nU R                  U   (       a�  [        R                  R	                  U R
                  U   5      S   n[        X25      (       aB  U R                  U   n[        R                  R                  U5      S   nSU-   SU-   SU-   S-   /$ / $ )zGGet the flags to be added to the cflags for precompiled header support.r   z/Yurn  z/Fp${pchprefix}.z.pch)rà   r|   r   r   Úsplitextr}   Ú_LanguageMatchesForPchr&   )r�   rn   Ú	extensionÚ
source_extÚpchÚpchbases         r   Ú_GetPchFlagsÚMsvsSettings._GetPchFlags*  sŸ   € à×#Ñ# FÓ+ˆð ×'Ñ'¨×/ÜŸ™×)Ñ)¨$×*FÑ*FÀvÑ*NÓOÐPQÑRˆJÜ% j×<Ñ<Ø×2Ñ2°6Ñ:�ÜŸ'™'Ÿ-™-¨Ó,¨QÑ/�Ø ™ U¨S¡[Ð2DÀwÑ2NÐQWÑ2WÐXÐXØˆ	r   c                 óH   • U R                  U5      nU R                  US5      $ )z;Returns the flags that need to be added to .c compilations.ú.c©rà   r~  ©r�   rn   s     r   Ú
GetCflagsCÚMsvsSettings.GetCflagsC8  s%   € à×#Ñ# FÓ+ˆØ× Ñ  ¨Ó.Ð.r   c                 óP   • U R                  U5      nS/U R                  US5      -   $ )z<Returns the flags that need to be added to .cc compilations.z/TPú.ccr‚  rƒ  s     r   ÚGetCflagsCCÚMsvsSettings.GetCflagsCC=  s,   € à×#Ñ# FÓ+ˆØˆw˜×*Ñ*¨6°5Ó9Ñ9Ð9r   c                 ó  • U R                  U5      nU R                  US4U/ S9nU Vs/ s H5  n[        R                  R	                  U" U R                  XRS95      5      PM7     nnU Vs/ s H  nSU-   S-   PM     sn$ s  snf s  snf )zLGet and normalize the list of paths in AdditionalLibraryDirectories
setting.ÚAdditionalLibraryDirectoriesrì   r²   z
/LIBPATH:"r   )rà   rä   r   r   r   r´   )r�   r/   rn   Úgyp_to_build_pathÚlibpathsrW   s         r   Ú _GetAdditionalLibraryDirectoriesÚ-MsvsSettings._GetAdditionalLibraryDirectoriesB  s¤   € ð ×#Ñ# FÓ+ˆØ—=‘=ØÐ1Ð2°FÀBð !ð 
ˆñ
 ó
â�ô �G‰G×ÑÑ.¨t×/CÑ/CÀAÐ/CÐ/UÓVÖWÙð 	ð 
ñ 19Ó9²¨1�˜qÑ  3Ô&±Ñ9Ð9ùò	
ùò :s   ©<B Á+Bc                 óä   • U R                  U5      n/ nU R                  X R                  U   SUS9nUR                  U R	                  SX5      5        U" SSS0S9  U" SSS	S
S.SS9  U" S5        U$ )z8Returns the flags that need to be added to lib commands.r  r+  ÚLinkTimeCodeGenerationr  ú/LTCGr6  ÚTargetMachineÚX86ÚX64ÚARM)rù   Ú17r0  ú	/MACHINE:r<  re  )rà   rÑ   rz   r@   rŽ  )r�   rn   rŒ  Úlibflagsrº   s        r   ÚGetLibFlagsÚMsvsSettings.GetLibFlagsO  sš   € à×#Ñ# FÓ+ˆØˆØ×ÑØ×$Ñ$ VÑ,Ð.?Èð ð 
ˆð 	�‰Ø×1Ñ1Ø! 6óô	
ñ
 	Ð$¨6°7Ð*;Ò<ÙØØ 5¨uÑ5Øò	
ñ
 	ÐÔ Øˆr   c                 ó.  • U R                   nUS   S;   a{  UR                  S/ 5       Vs/ s H*  o3R                  5       R                  S5      (       d  M(  UPM,     nn[	        U5      S:X  a  U" US   5      $ [	        U5      S:”  a  [        S5      egs  snf )	zDReturns the .def file from sources, if any.  Otherwise returns None.rš   )Úshared_libraryÚloadable_moduleÚ
executableÚsourcesz.defr   r   zMultiple .def filesN)r‡   r.   r·   r¸   Úlenr�   )r�   rŒ  r‡   r³   Ú	def_filess        r   Ú
GetDefFileÚMsvsSettings.GetDefFiled  sŽ   € à�y‰yˆØ�‰<ÐNÓNàŸ8™8 I¨rÔ2óÚ2�a·g±g³i×6HÑ6HÈ×6P—Ñ2ð ð ô �9‹~ Ó"Ù(¨°1©Ó6Ð6Ü�Y“ !Ó#ÜÐ 5Ó6Ð6Øùòs   ª'BÁBc                 ó^   • U R                  U5      nU(       a  UR                  SU-  5        gg)z~.def files get implicitly converted to a ModuleDefinitionFile for the
linker in the VS generator. Emulate that behaviour here.z	/DEF:"%s"N)r£  rA   )r�   ÚldflagsrŒ  Údef_files       r   Ú_GetDefFileAsLdflagsÚ!MsvsSettings._GetDefFileAsLdflagsq  s,   € ð —?‘?Ð#4Ó5ˆÞØ�N‰N˜;¨Ñ1Õ2ð r   c                 ó„   • U R                  U5      nU R                  SU5      nU(       a  U" U R                  X1S95      nU$ )z\Gets the explicitly overridden pgd name for a target or returns None
if it's not overridden.)r
  ÚProfileGuidedDatabaser²   r  )r�   rn   r  r  s       r   Ú
GetPGDNameÚMsvsSettings.GetPGDNamex  sK   € ð ×#Ñ# FÓ+ˆØ—m‘mÐ$MÈvÓVˆÞÙ(Ø×$Ñ$ [Ð$Ð@óˆKð Ðr   c                 óB  • U R                  U5      n/ nU R                  X R                  U   SUS9n	U R                  X‚5        U	" SSS0S9  U	" SSS	S
SS.SS9  UR	                  U R                  SX5      5        U	" SSS9  U	" SSSSS.S9  U R                  X5      n
U
(       a  UR                  SU
-   5        U R                  XUS-   5      nU(       a  UR                  SU-   5        U R                  X5      nU(       a  UR                  SU-   5        U R                  X5      nU	" SSU(       a  SU-   OS0S9  U	" SSS 0S9  U	" S!SS9  U R                  S"USS#9nU(       a  S$U-   nU	" S%S&U-  S'U-  S(.S)S9  U R                  S*USS#9nU(       a3  U R                  S+USS#9nU(       a  S$U-   nUR                  S,U U 35        U	" S-SSS(.S.S9  U	" S/SSS(.S0S9  U	" S1S2S9  U	" S3SSS(.S4S9  U	" S5SSS(.S6S9  U	" S7SSS(.S8S9  U	" S9S:S;S(.S<S9  U	" S=S>S9  U	" S?S@SAS(.S<S9  U	" SBSSCSDSESF.SGS9  U	" SHSIS9  U	" SJSSK0S9  U	" SLSMS9  U	" SNSSO0S9  U	" SPSSS(.SQS9  U	" SRSS9  U R                  U5      SS:X  a  SOSTnU	" SUSSSV.SWUSX9  [        SY U 5       5      (       d  UR                  S65        [        SZ U 5       5      (       d  UR                  S85        [        S[ U 5       5      nU R                  UUUU=(       a    U(       + U5      u  nnnUR	                  U5        UUU4$ )\zQReturns the flags that need to be added to link commands, and the
manifest files.r
  r+  r  r  z/DEBUGr6  r“  r”  r•  r–  rÕ   )rù   r—  r0  Ú18r˜  r<  ÚDelayLoadDLLsz/DELAYLOAD:r3  ÚTreatLinkerWarningAsErrorsrJ  r   z:NOrT  ©r6   r<   z/OUT:z.pdbz/PDB:z/PGD:ÚGenerateMapFilez/MAP:z/MAPÚ
MapExportsz/MAPINFO:EXPORTSre  )r
  ÚMinimumRequiredVersionrì   Ú,Ú	SubSystemz	CONSOLE%sz	WINDOWS%sr@  z/SUBSYSTEM:)r
  ÚStackReserveSize)r
  ÚStackCommitSizez/STACK:ÚTerminalServerAwarez/TSAWAREÚLinkIncrementalz/INCREMENTALÚBaseAddressz/BASE:ÚFixedBaseAddressú/FIXEDÚRandomizedBaseAddressz/DYNAMICBASEÚDataExecutionPreventionz	/NXCOMPATÚOptimizeReferencesÚNOREFÚREFz/OPT:ÚForceSymbolReferencesz	/INCLUDE:ÚEnableCOMDATFoldingÚNOICFÚICFr‘  z:PGINSTRUMENTz:PGOPTIMIZEz	:PGUPDATE)rù   rü   r0  rR  r’  ÚIgnoreDefaultLibraryNamesz/NODEFAULTLIB:ÚResourceOnlyDLLz/NOENTRYÚEntryPointSymbolz/ENTRY:ÚProfilez/PROFILEÚLargeAddressAwarez/LARGEADDRESSAWAREÚAdditionalDependenciesr¢   NÚImageHasSafeExceptionHandlersr:  z/SAFESEHr1  c              3   óD   #   • U  H  nS U;   =(       d    US:H  v •  M     g7f)ÚDYNAMICBASEr¾  Nrd   ©r"   Úflags     r   r#   Ú*MsvsSettings.GetLdflags.<locals>.<genexpr>ì  s"   é € ÐQÊÀ�= DÑ(×<¨D°HÑ,<Ô<Êùó   ‚ c              3   ó,   #   • U  H
  nS U;   v •  M     g7f)ÚNXCOMPATNrd   rÑ  s     r   r#   rÓ  ó  s   é € Ð:²'¨$�: Ö%²'ùrg   c              3   óB   #   • U  H  oR                  S 5      v •  M     g7f)z/DEF:N)r%   rÑ  s     r   r#   rÓ  ö  s   é € ÐIÂ¸ŸO™O¨G×4Ð4Âùs   ‚)rà   rÑ   rz   r¨  r@   rŽ  r  rA   r  r¬  r  rä   r¦   rj   Ú_GetLdManifestFlags)r�   rn   rŒ  r  Úmanifest_base_nameÚoutput_nameÚis_executableÚ	build_dirr¦  ÚldÚoutÚpdbÚpgdr  Úminimum_required_versionÚstack_reserve_sizeÚstack_commit_sizeÚsafeseh_defaultÚhave_def_fileÚmanifest_flagsÚintermediate_manifestÚmanifest_filess                         r   Ú
GetLdflagsÚMsvsSettings.GetLdflagsƒ  sú  € ð ×#Ñ# FÓ+ˆØˆØ×ÑØ×$Ñ$ VÑ,¨nÀWð ð 
ˆð 	×!Ñ! 'Ô=Ù
Ð%¨F°HÐ+=Ò>ñ 	ØØ 5¨u¸GÑDØò	
ð
 	�‰Ø×1Ñ1Ø óô	
ñ
 	ˆ? =Ò1Ù
Ð'°ÀBÐQVÑ;WÒXØ× Ñ  Ó8ˆÞØ�N‰N˜7 S™=Ô)Ø�o‰o˜f°kÀFÑ6JÓKˆÞØ�N‰N˜7 S™=Ô)Ø�o‰o˜fÓ5ˆÞØ�N‰N˜7 S™=Ô)Ø×&Ñ& vÓ>ˆÙ
Ð 6Æ¨7°XÒ+=ÈvÐ"VÒWÙ
ˆ<˜fÐ&8Ð9Ò:Ù
Ð rÒ*à#'§=¡=Ø6¸Èð $1ð $
Ð ö $Ø'*Ð-EÑ'EÐ$Ù
Øà Ð#;Ñ;Ø Ð#;Ñ;ñð !ò	
ð "Ÿ]™]Ø0°&À"ð +ð 
Ðö Ø $§¡Ø3°VÀRð !.ð !Ðö !Ø$'Ð*;Ñ$;Ð!Ø�N‰N˜WÐ%7Ð$8Ð9JÐ8KÐLÔMá
Ð ¨E¸Ñ&;ÀJÒOÙ
Ð¨°BÑ"7ÀÒOÙ
ˆ= Ò*Ù
Ð¨°RÑ#8ÀÒJÙ
Ð"¨e¸"Ñ(=ÀnÒUÙ
Ð$°¸BÑ*?ÈÒTÙ
Ð¨7¸Ñ%?ÈÒPÙ
Ð"¨;Ò7Ù
Ð ¨G¸%Ñ&@ÈÒQÙ
Ø$Ø˜°]ÈÑUØò	
ñ
 	Ð&Ð/?Ò@Ù
Ð 6¨:Ð"6Ò7Ù
Ð iÒ0Ù
ˆ9˜6 :Ð.Ò/Ù
Ð¨%°bÑ$9ÐBVÒWá
Ð#¨BÒ/à$(§L¡L°Ó$8¸EÓ$A™&ÀtˆÙ
Ø+Ø¨Ñ,ØØ#ò		
ô ÑQÉÓQ×QÑQØ�N‰N˜>Ô*ô Ñ:±'Ó:×:Ñ:Ø�N‰N˜;Ô'äÑIÁÓIÓIˆð
 ×$Ñ$ØØØØ×/ -Ô/Øó
ñ		
ØØ!Øð 	�‰�~Ô&ØÐ-¨~Ð=Ð=r   c                 óÀ  • U R                  SUSS9nUS:w  a  S// / 4$ US-   nSSU-   /nUR                  S5        U R                  U5      nU R                  S	USS9n	/ n
S
nU	S:X  a=  U R                  SUSS9nSSSS.nU R                  SUSS9nSR                  XÜ   U5      nOSnX¿-  nUS-   n[        R
                  R                  UU5      n[        R                  R                  U5        [        R                  R                  U5      nUR                  U5        UR                  5         U/n
U(       a  UR                  S5        X R                  X5      -  n
X‡U
4$ )aR  Returns a 3-tuple:
- the set of flags that need to be added to the link to generate
  a default manifest
- the intermediate manifest that the linker will generate that should be
  used to assert it doesn't add anything to the merged one.
- the list of all the manifest files to be merged by the manifest tool and
  included into the link.)r
  ÚGenerateManifestr  rì   z/MANIFEST:NOz.intermediate.manifestz	/MANIFESTz/ManifestFile:z/MANIFESTUAC:NO)r
  Ú	EnableUACz�<?xml version='1.0' encoding='UTF-8' standalone='yes'?><assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>%s</assembly>)r
  ÚUACExecutionLevelr/  Ú	asInvokerÚhighestAvailableÚrequireAdministratorrE  )r
  ÚUACUIAccessr;  zÍ
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
  <security>
    <requestedPrivileges>
      <requestedExecutionLevel level='{}' uiAccess='{}' />
    </requestedPrivileges>
  </security>
</trustInfo>r   z.generated.manifestz/ALLOWISOLATION)rä   rA   rà   rŽ   r   r   r'   r›   ÚcommonÚEnsureDirExistsÚWriteOnDiffÚwriteÚcloseÚ_GetAdditionalManifestFiles)r�   rn   rÉ   rŒ  Úallow_isolationrÜ  Úgenerate_manifestrÚ  ÚflagsÚ
enable_uacrè  Úgenerated_manifest_outerÚexecution_levelÚexecution_level_mapÚ	ui_accessÚinnerÚgenerated_manifest_contentsÚgenerated_nameÚbuild_dir_generated_namert  s                       r   rØ  Ú MsvsSettings._GetLdManifestFlags  sº  € ð !ŸM™MØ0°&À&ð *ð 
Ðð  Ó&ð #Ð# R¨Ð+Ð+àÐ5Ñ5ˆàØ˜{Ñ*ð
ˆð 	�‰Ð&Ô'à×#Ñ# FÓ+ˆØ—]‘]Ø)¨6¸6ð #ð 
ˆ
ð ˆðð 	!ð
 ˜ÓØ"Ÿm™mØ5°vÀsð ,ð ˆOð !Ø'Ø+ñ#Ðð Ÿ™Ø/°Àð &ð ˆIð÷ ‘Ø#Ñ4Øóñ ð ˆEà&>Ñ&FÐ#ØÐ 5Ñ5ˆô $&§7¡7§<¡<°	¸>Ó#JÐ Ü�
‰
×"Ñ"Ð#;Ô<Ü�J‰J×"Ñ"Ð#;Ó<ˆØ	�‰Ð+Ô,Ø	�‰Œ	Ø(Ð)ˆæØ�L‰LÐ*Ô+à×:Ñ:¸6ÓUÑUˆØ >Ð1Ð1r   c                 ó   • U R                  SU/ S9n[        U[        5      (       a  UR                  S5      nU Vs/ s H5  n[        R
                  R                  U" U R                  XAS95      5      PM7     sn$ s  snf )zYGets additional manifest files that are added to the default one
generated by the linker.)ÚVCManifestToolÚAdditionalManifestFilesrì   Ú;r²   )rä   r2   r‰   r&   r   r   r   r´   )r�   rn   rŒ  Úfilesrt  s        r   rø  Ú(MsvsSettings._GetAdditionalManifestFilesc  s…   € ð —‘Ø9¸6È2ð ð 
ˆô �eœS×!Ñ!Ø—K‘K Ó$ˆEñ ó
â�ô �G‰G×ÑÑ.¨t×/CÑ/CÀAÐ/CÐ/UÓVÖWÙñ
ð 	
ùò 
s   ¼<A;c                 óR   • U R                  U5      nU R                  SU5      nUS:H  $ )zvReturns whether the target should be linked via Use Library Dependency
Inputs (using component .objs of a given .lib).)r
  ÚUseLibraryDependencyInputsr  r  )r�   rn   Úuldis      r   ÚIsUseLibraryDependencyInputsÚ)MsvsSettings.IsUseLibraryDependencyInputsp  s/   € ð ×#Ñ# FÓ+ˆØ�}‰}ÐKÈVÓTˆØ�v‰~Ðr   c                 óP   • U R                  U5      nU R                  SUSS9nUS:H  $ )z6Returns whether manifest should be linked into binary.)r  ÚEmbedManifestr  rì   r  )r�   rn   Úembeds      r   ÚIsEmbedManifestÚMsvsSettings.IsEmbedManifestw  s8   € à×#Ñ# FÓ+ˆØ—‘Ø/°Àð ð 
ˆð ˜‰Ðr   c                 óR   • U R                  U5      nU R                  SU5      nUS:g  $ )z:Returns whether the target should be linked incrementally.)r
  r»  rù   r  )r�   rn   Úlink_incs      r   ÚIsLinkIncrementalÚMsvsSettings.IsLinkIncremental  s-   € à×#Ñ# FÓ+ˆØ—=‘=Ð!DÀfÓMˆØ˜3‰Ðr   c                 óÌ   • U R                  U5      n/ nU R                  X R                  U   SUS9nU" SUSS9  UR                  SU" S5      -   5        U" SSS	9  U" S
SS S9  U$ )zPReturns the flags that need to be added to invocations of the resource
compiler.ÚVCResourceCompilerToolr+  rë   z/Ir<  r‚   rþ   z/dr3  ÚCulturez/lc                 ó0   • [        [        U 5      5      SS  $ )Nr   )ÚhexrÜ   ©r.  s    r   r   Ú)MsvsSettings.GetRcflags.<locals>.<lambda>‘  s   € ´´S¸³V³¸Q¸R±r   r²  )rà   rÑ   rz   rA   )r�   rn   Úgyp_to_ninja_pathÚrcflagsÚrcs        r   Ú
GetRcflagsÚMsvsSettings.GetRcflags…  s…   € ð ×#Ñ# FÓ+ˆØˆØ×ÑØ×$Ñ$ VÑ,Ð.FÈwð ð 
ˆñ 	Ð)Ð/@ÈÒNØ�‰�tÑ/°Ó4Ñ4Ô5Ù
Ð$¨TÒ2á
ˆ9˜TÑ'@ÒAØˆr   c                 óÂ  • [         R                  R                  [         R                  R                  X R                  S   5      5      nSU-  R                  SS5      nU Vs/ s H$  oUR                  SS5      R                  SS5      PM&     nnU Vs/ s H  nSUR                  SS	5      -  PM     nnS
R                  U5      nSU-  SU SU S3-   nU$ s  snf s  snf )a3  Build a command line that runs args via cygwin bash. We assume that all
incoming paths are in Windows normpath'd form, so they need to be
converted to posix style for the part of the command line that's passed to
bash. We also have to do some Visual Studio macro emulation here because
various rules use magic VS names for things. Also note that rules that
contain ninja variables cannot be fixed here (for example ${source}), so
the outer generator needs to make sure that the paths that are written out
are in posix style, if the command line will be used here.r   zcd %srL   r   r   r	   z'%s'Ú'z'\''r   z1call "%s\setup_env.bat" && set CYGWIN=nontsec && z	bash -c "z ; )r   r   r   r'   r�   r   )r�   r(   Úpath_to_baseÚ
cygwin_dirÚcdra  Úbash_cmdrV   s           r   ÚBuildCygwinBashCommandLineÚ'MsvsSettings.BuildCygwinBashCommandLine”  sÛ   € ô —W‘W×%Ñ%Ü�G‰G�L‰L˜×'<Ñ'<¸QÑ'?Ó@ó
ˆ
ð ˜Ñ$×-Ñ-¨d°CÓ8ˆÙBFÓGÂ$¸Q—	‘	˜$ Ó$×,Ñ,¨S°%Ö8Á$ˆÐGÙ:>Ó?º$°Q�˜Ÿ™ 3¨Ó0Ô0¹$ˆÐ?Ø—8‘8˜D“>ˆà@À:ÑMØ˜"˜˜S  
¨!Ð,ñ-ð 	ð ˆ
ùò HùÚ?s   Á#+CÂCÚRuleShellFlagsÚcygwinÚquotec           	      óø   • [        UR                  SU R                  R                  SS5      5      5      S:g  n[        UR                  SS5      5      nUS:w  d  US:w  d   S5       e[        R	                  X#5      $ )z¿Return RuleShellFlags about how the given rule should be run. This
includes whether it should run under cygwin (msvs_cygwin_shell), and
whether the commands should be quoted (msvs_quote_cmd).Úmsvs_cygwin_shellr   r   Úmsvs_quote_cmdz8msvs_quote_cmd=0 only applicable for msvs_cygwin_shell=0)rÜ   r.   r‡   rv   r.  )r�   Úruler/  r   s       r   ÚGetRuleShellFlagsÚMsvsSettings.GetRuleShellFlags¬  s‚   € ô
 �T—X‘XÐ1Ø"Ÿi™iŸm™mÐ,?ÀÓCóEó FØIJñKˆô
 ˜Ÿ™Ð!1°1Ó5Ó6ˆ	Ø˜A‹~ ¨1£ð 	JØIó	JÐ,ä×*Ñ*¨6Ó=Ð=r   c                 óN   ^• [        U4S jUR                  S/ 5       5       5      $ )zADetermine if there's an explicit rule for a particular extension.c              3   ó2   >#   • U  H  oS    T:H  v •  M     g7f)rz  Nrd   )r"   r4  rz  s     €r   r#   Ú<MsvsSettings._HasExplicitRuleForExtension.<locals>.<genexpr>½  s   øé € ÐTÒ>S°d˜Ñ$¨	Ö1Ò>Sùs   ƒÚrules©rj   r.   )r�   r‡   rz  s     `r   Ú_HasExplicitRuleForExtensionÚ)MsvsSettings._HasExplicitRuleForExtension»  s    ø€ äÔT¸d¿h¹hÀwÐPRÔ>SÓTÓTÐTr   c                 óF   • [        S UR                  S/ 5       5       5      $ )z:Determine if an action should not run midl for .idl files.c              3   óD   #   • U  H  oR                  S S5      v •  M     g7f)Úexplicit_idl_actionr   N)r.   )r"   Úactions     r   r#   Ú6MsvsSettings._HasExplicitIdlActions.<locals>.<genexpr>Á  s!   é € ð 
Ú?V°V�J‰JÐ,¨a×0Ð0Ò?VùrÔ  Úactionsr;  ©r�   r‡   s     r   Ú_HasExplicitIdlActionsÚ#MsvsSettings._HasExplicitIdlActions¿  s(   € äñ 
Ø?C¿x¹xÈ	ÐSUÔ?Vó
ó 
ð 	
r   c                 óV   • U R                  US5      =(       d    U R                  U5      $ )zŒDetermine if there's an explicit rule or action for idl files. When
there isn't we need to generate implicit rules to build MIDL .idl files.Úidl)r<  rE  rD  s     r   ÚHasExplicitIdlRulesOrActionsÚ)MsvsSettings.HasExplicitIdlRulesOrActionsÅ  s/   € ð ×0Ñ0Ø�%ó
÷ /à×(Ñ(¨Ó.ð	/r   c                 ó&   • U R                  US5      $ )z€Determine if there's an explicit rule for asm files. When there isn't we
need to generate implicit rules to assemble .asm files.Úasm)r<  rD  s     r   ÚHasExplicitAsmRulesÚ MsvsSettings.HasExplicitAsmRulesÌ  s   € ð ×0Ñ0°°uÓ=Ð=r   c                 óD  ^ ^^• T R                  T5      mT R                  T T R                  T   S5      mSUUU 4S jjnU" SSS9nU" SSS9nU" SS	S9nU" S
SS9nU" SSS9nU" SSS9n	XVXx/n
SU4SU4SU4SU4SU4/nT R                  T5      nUS:X  a  SnSSSUS/nXšX½4$ )z}Determine the implicit outputs for an idl file. Returns output
directory, outputs, and variables and flags that are required.ró   c                 ó,   >• TR                  T" XS9TS9$ )Nrì   r²   )r´   )rÉ   r0   rn   Úmidl_getr�   s     €€€r   ÚmidlÚ*MsvsSettings.GetIdlBuildData.<locals>.midl×  s   ø€ Ø×'Ñ'©°Ñ(GÐPVÐ'ÐWÐWr   ÚTypeLibraryNamez${root}.tlbrì   ÚHeaderFileNamez	${root}.hÚDLLDataFileNamez	dlldata.cÚInterfaceIdentifierFileNamez${root}_i.cÚProxyFileNamez${root}_p.cÚOutputDirectoryr   ÚtlbÚhÚdlldataÚiidÚproxyr¢   Úwin32z/charÚsignedz/envz/Oicfr!   )rà   rÑ   rz   r¦   )r�   Úsourcern   rR  rZ  Úheaderr\  r]  r^  ÚoutdirÚoutputÚ	variablesrª   rû  rQ  s   ` `           @r   ÚGetIdlBuildDataÚMsvsSettings.GetIdlBuildDataÑ  sÿ   ú€ ð ×#Ñ# FÓ+ˆØ×#Ñ# D¨$×*<Ñ*<¸VÑ*DÀlÓSˆ÷	Xñ 	Xñ Ð$¨mÑ<ˆÙÐ&°Ñ<ˆÙÐ(°+Ñ>ˆÙÐ0¸-ÑHˆÙ�_¨mÑ<ˆñ Ð'°Ñ4ˆØ 3Ð.ˆà�CˆLØ�&ˆMØ˜Ð Ø�CˆLØ�eÐð
ˆ	ð Ÿ,™, vÓ.ˆØ˜eÓ#Ø%ˆOØ˜( F¨O¸WÐEˆØ˜yÐ/Ð/r   )r�   r‡   r]   )NN)Nr   NN)4rÌ   rÍ   rÎ   rÏ   Ú__doc__r–   rŸ   r¯   r´   r¼   rÀ   rÑ   r¦   rà   rä   rç   rï   rõ   r   r  r  r  r  r!  r(  ru  r~  r„  rˆ  rŽ  rš  r£  r¨  r¬  ré  rØ  rø  r  r  r  r$  r,  ÚcollectionsÚ
namedtupler.  r5  r<  rE  rI  rM  rf  rÐ   rd   r   r   rv   rv   È   s  † ñ?ò$4òL	Gôô:$ò

ò/÷ñ ò"Uòô$
ð GKô
ò
Jò
Jòò òòòò "òòLò\ò/ò
:ò
:òò*ò3ò	ò@>òD\2ò|
òòòòòð, !×+Ò+Ð,<¸xÈÐ>QÓR€Nò>òUò
ò/ò>õ
0r   rv   c                 óT   • SnSnX;   =(       a    X;   =(       d    X;   =(       a    X;   $ )N)r�  )r‡  z.cxxz.cpprd   )r{  Úpch_source_extÚc_extsÚcc_extss       r   ry  ry  ò  s2   € Ø€FØ%€GØÑ ×= ^Ñ%=÷ ØÑ×; .Ñ";ðr   c                   ó6   • \ rS rSrSrS rS rS rS rS r	Sr
g	)
ÚPrecompiledHeaderiú  z–Helper to generate dependencies and build rules to handle generation of
precompiled headers. Interface matches the GCH handler in xcode_emulation.py.
c                 óø   • Xl         X l        U R                   R                  U R                     nU" U5      U l        [        R
                  R                  U5      u  pxU" Xu-   5      R                  5       U l        g r!   )	Úsettingsrn   r}   Ú
pch_sourcer   r   rx  r·   Ú
output_obj)	r�   rr  rn   rŒ  Úgyp_to_unique_outputÚobj_extrs  ÚfilenamerÛ   s	            r   r–   ÚPrecompiledHeader.__init__ÿ  s`   € ð !ŒØŒØ—]‘]×:Ñ:¸4¿;¹;ÑGˆ
Ù+¨JÓ7ˆŒÜ—g‘g×&Ñ& zÓ2‰ˆÙ.¨xÑ/AÓB×HÑHÓJˆ�r   c                 óH   • U R                   R                  U R                     $ )zIGet the header that will appear in an #include line for all source
files.)rr  r|   rn   )r�   s    r   Ú
_PchHeaderÚPrecompiledHeader._PchHeader	  s   € ð �}‰}×4Ñ4°T·[±[ÑAÐAr   c                 ó.  • Ub   eU R                  5       (       d  / $ [        R                  R                  U R                  5      S   nU HF  n[        [        R                  R                  U5      S   U5      (       d  M6  SSU R                  4/s  $    / $ )z÷Given a list of sources files and the corresponding object files,
returns a list of the pch files that should be depended upon. The
additional wrapping in the return value is for interface compatibility
with make.py on Mac, and xcode_emulation.py.Nr   )rz  r   r   rx  rs  ry  rt  )r�   r   Úobjsrß   Úpch_extra  s         r   ÚGetObjDependenciesÚ$PrecompiledHeader.GetObjDependencies  sƒ   € ð
 ‰|Ðˆ|Ø�‰× Ñ ØˆIÜ—'‘'×"Ñ" 4§?¡?Ó3°AÑ6ˆÛˆFÜ%¤b§g¡g×&6Ñ&6°vÓ&>¸qÑ&AÀ7×KÓKØ˜t T§_¡_Ð5Ð6Ò6ñ ð ˆ	r   c                 ó   • / $ )zŠNot used on Windows as there are no additional build steps required
(instead, existing steps are modified in GetFlagsModifications below).rd   )r�   rß   s     r   ÚGetPchBuildCommandsÚ%PrecompiledHeader.GetPchBuildCommands  s	   € ð ˆ	r   c                 óà   • XR                   :X  a\  SU R                  5       -   /nUS:X  a  S[        XvU-   5      4/U R                  / 4$ US:X  a  S[        XuU-   5      4/U R                  / 4$ / X#4$ )zcGet the modified cflags and implicit dependencies that should be used
for the pch compilation step.z/YcÚcxxÚ	cflags_ccÚccÚcflags_c)rs  rz  r<   rt  )	r�   Úinputrd  ÚimplicitÚcommandrˆ  r†  r  Ú
pch_outputs	            r   ÚGetFlagsModificationsÚ'PrecompiledHeader.GetFlagsModifications!  s’   € ð
 —O‘OÓ#Ø $§/¡/Ó"3Ñ3Ð4ˆJØ˜%Óà!¤3 ~À:Ñ7MÓ#NÐOÐPØ—O‘OØðð ð
 ˜D“à ¤# nÀÑ6KÓ"LÐMÐNØ—O‘OØðð ð
 �6Ð#Ð#r   )rn   rt  rs  rr  N)rÌ   rÍ   rÎ   rÏ   rh  r–   rz  r  r‚  r�  rÐ   rd   r   r   rp  rp  ú  s"   † ñòKòBò
òõ
$r   rp  c                 ó€   • [         (       d.  [        R                  R                  U R	                  SS5      SS9q [         $ )NÚmsvs_versionÚautoF)Úallow_fallback)r]   r›   ÚMSVSVersionÚSelectVisualStudioVersionr.   )rl   s    r   rh   rh   :  s:   € çŠ:Ü—_‘_×>Ñ>Ø×Ñ °Ó7Èð ?ð 
ˆ
ô Ðr   c                 ó8   • [        U 5      nUR                  5       $ r!   )rh   ÚSetupScript)rl   rß   Úvss      r   Ú_GetVsvarsSetupArgsr˜  C  s   € Ü	�oÓ	&€BØ�>‰>ÓÐr   c                 ó€   • SU ;   a7  UR                  5        H#  u  p#SU;  d   U5       eU R                  X#5      n M%     U $ )zyExpand $(Variable) per expansions dict. See MsvsSettings.GetVSMacroEnv
for the canonical way to retrieve a suitable dict.rc   z$()r‹   r   )ÚstringÚ
expansionsÚoldÚnews       r   ri   ri   H  sF   € ð ˆfƒ}Ø"×(Ñ(Ö*‰HˆCØ˜s“?Ð' CÓ'�?Ø—^‘^ CÓ-ŠFñ +ð €Mr   c                 ó  • Sn0 nU R                  S5      S:X  a  [        SU -  5      eU R                  5        H©  nU H   n[        R                  " US-   UR                  5       5      (       d  M2  UR                  SS5      u  pVUS:X  aA  [        R                  R                  [        R                  5      [        R                  -   U-   nXbUR                  5       '     M§     M«     S H  nXr;  d  M
  [        SU-  5      e   U$ )	zyExtracts environment variables required for the toolchain to run from
a textual dump output by the cmd.exe 'set' command.)	zgoma_.*re   rº   Úlibpathr   ÚpathextÚ
systemrootÚtempÚtmpÚ=r   z#Invalid output_of_set. Value is:
%sr   r   )Ú
SYSTEMROOTÚTEMPÚTMPz:Environment variable "%s" required to be set to valid path)r   r�   rU   ÚreÚmatchr·   r&   r   r   ÚdirnameÚsysrŸ  ÚpathsepÚupper)Úoutput_of_setÚenvvars_to_saver^   rX   ÚenvvarÚvarÚsettingÚrequireds           r   Ú_ExtractImportantEnvironmentr´  R  sò   € ð
€Oð €Cð ×Ñ˜3Ó 1Ó$ÜÐ>ÀÑNÓOÐOØ×(Ñ(Ö*ˆÛ%ˆFÜ�xŠx˜ ™ d§j¡j£l×3Ó3Ø#Ÿz™z¨#¨qÓ1‘�Ø˜VÓ#ô
 !Ÿg™gŸo™o¬c¯n©nÓ=ÄÇ
Á
ÑJÈWÑT�GØ#*�C—I‘I“KÑ Úó &ñ +ó 2ˆØÕÜð3Ø5=ñ>óð ñ 2ð €Jr   c                 ób   • SnSnU R                  5        H  u  p4XS-   U-   U-   -  nM     X-  nU$ )z¼Format as an 'environment block' directly suitable for CreateProcess.
Briefly this is a list of key=value , terminated by an additional  . See
CreateProcess documentation for more details.r   Ú r¤  )r‹   )Úenvvar_dictÚblockÚnulÚkeyÚvalues        r   Ú_FormatAsEnvironmentBlockr¼  z  sE   € ð €EØ
€CØ!×'Ñ'Ö)‰
ˆØ�s‘˜UÑ" SÑ(Ñ(Šñ *à	�L€EØ€Lr   c                 ó¶   • U R                  5       R                  5        H7  nUR                  S5      (       d  M  U[        S5      S R                  5       s  $    g)zGets the path to cl.exe based on the output of calling the environment
setup batch file, followed by the equivalent of `where`.zLOC:N)ÚstriprU   r%   r¡  )Úoutput_of_whererX   s     r   Ú_ExtractCLPathrÀ  †  sI   € ð  ×%Ñ%Ó'×2Ñ2Ö4ˆØ�?‰?˜6×"Ó"Øœ˜F›˜Ð&×,Ñ,Ó.Ò.ò 5r   c                 ó  • SnUR                  SS5      (       a  0 nU H  nSXV'   M	     U$ [        U5      n0 nU GHÂ  nUR                  U5      nUR                  S5        [        R
                  " US[        R                  [        R                  S9n	U	R                  5       S   R                  S5      n
U	R                  S:w  a  [        S	X‰R                  4-  5      e[        U
5      nU(       aA  U[        UR                  S
S5      R                  S5      5      -  nSR                  U5      US
'   [!        U5      nU" ["        R$                  R                  U SU-   5      S5      nUR'                  U5        UR)                  5         UR                  U5      nUR                  S5        [        R
                  " US[        R                  S9n	U	R                  5       S   R                  S5      n[+        U5      XV'   GMÅ     U$ )aä  It's not sufficient to have the absolute path to the compiler, linker,
etc. on Windows, as those tools rely on .dlls being in the PATH. We also
need to support both x86 and x64 compilers within the same build (to support
msvs_target_platform hackery). Different architectures require a different
compiler binary, and different supporting environment variables (INCLUDE,
LIB, LIBPATH). So, we extract the environment here, wrap all invocations
of compiler tools (cl, link, lib, rc, midl, etc.) via win_tool.py which
sets up the environment, and then we do not prefix the compiler with
an absolute path, instead preferring something like "cl.exe" in the rule
which will then run whichever the environment setup has put in the path.
When the following procedure to generate environment files does not
meet your requirement (e.g. for custom toolchains), you can pass
"-G ninja_use_custom_environment_files" to the gyp to suppress file
generation and use custom environment files prepared by yourself.)r¢   rÓ   Ú"ninja_use_custom_environment_filesr   zcl.exe)ú&&ÚsetT)ÚshellrG   rH   rI   z"%s" failed with error %dÚINCLUDEr   r	  zenvironment.rr  )rÃ  Úforz%iÚinz(cl.exe)Údoz@echozLOC:%~$PATH:i)rÅ  rG   )r.   rh   r–  r@   rP   rQ   rR   ÚSTDOUTrS   rT   Ú
returncoder�   r´  r   r&   r'   r¼  r   r   rö  r÷  rÀ  )Útoplevel_build_dirrl   ro   Úopen_outÚarchsÚcl_pathsrß   r—  r(   Úpopenre  r^   Ú	env_blockrt  rd  s                  r   ÚGenerateEnvironmentFilesrÒ  �  sÎ  € ð" €EØ×ÑÐ?À×CÑCØˆÛˆDØ%ˆH‹Nñ àˆÜ	�oÓ	&€BØ€HÜˆà�~‰~˜dÓ#ˆØ�‰�MÔ"Ü× Ò Ø˜¤Z§_¡_¼Z×=NÑ=Nñ
ˆð ×%Ñ%Ó'¨Ñ*×1Ñ1°'Ó:ˆ	Ø×Ñ˜qÓ ÜÐ7¸4×AQÑAQÐ:RÑRÓSÐSÜ*¨9Ó5ˆö Ø-´
Ø—‘˜	 2Ó&×,Ñ,¨SÓ1ó1ñ ˆOð !ŸX™X oÓ6ˆC�	‰Nä-¨cÓ2ˆ	Ù”R—W‘W—\‘\Ð"4°nÀtÑ6KÓLÈcÓRˆØ	�‰�	ÔØ	�‰Œ	ð �~‰~˜dÓ#ˆØ�‰ØQô	
ô × Ò  ¨T¼*¿/¹/ÑJˆØ×"Ñ"Ó$ QÑ'×.Ñ.¨wÓ7ˆÜ'¨Ó/ˆŒñ? ð@ €Or   c           	      óþ  • [        UR                  SS5      5      (       aÎ  [        S U 5      nU Vs/ s H(  n[        R                  R                  X" U5      5      PM*     nnU Vs/ s H+  n[        R                  R                  U5      (       a  M)  UPM-     nnU(       aL  U Vs/ s H"  n[        R                  R                  U5      PM$     n	n[        SSR                  U	5      -  5      eggs  snf s  snf s  snf )a]  Emulate behavior of msvs_error_on_missing_sources present in the msvs
generator: Check that all regular source files, i.e. not created at run time,
exist on disk. Missing files cause needless recompilation when building via
VS, and we want this check to match for people/bots that build using ninja,
so they're not surprised when the VS build fails.Úmsvs_error_on_missing_sourcesr   c                 ó   • SU ;  $ )Nrc   rd   r  s    r   r   Ú&VerifyMissingSources.<locals>.<lambda>Ò  s   €  s°!¢|r   zMissing input files:
%sr†   N)	rÜ   r.   r;   r   r   r'   Úexistsr   r�   )
r   rÜ  rl   Úgyp_to_ninjaÚno_specialsr³   Úrelativer.  ÚmissingÚ
cleaned_ups
             r   ÚVerifyMissingSourcesrÝ  Ë  sÍ   € ô ˆ?×ÑÐ>ÀÓB×CÑCÜÑ3°WÓ=ˆÙFQÓRÂkÀ”B—G‘G—L‘L ¨L¸«OÖ<ÁkˆÐRÙ&Ó@šh˜¬b¯g©g¯n©n¸Q×.?—1™hˆÐ@Þñ 8?Ó?²w°!œ"Ÿ'™'×*Ñ*¨1Ö-±wˆJÐ?ÜÐ6¸¿¹À:Ó9NÑNÓOÐOð	 ð	 DùâRùÚ@ùò @s   ²/C0Á'(C5ÂC5Â&)C:c                 ó2  • UR                  S0 5      n[        R                  R                  U5      nUR	                  5       U S'   S[
        R                  R                  SS5      ;   d$  S[
        R                  R                  SS5      ;   a  SU S'   g S	U S'   g )
Nrl   ÚMSVS_VERSIONÚ64ÚPROCESSOR_ARCHITECTUREr   ÚPROCESSOR_ARCHITEW6432é@   ÚMSVS_OS_BITSé    )r.   r›   Úmsvs_emulationrh   Ú	ShortNamer   rO   )Údefault_variablesÚparamsrl   r�  s       r   ÚCalculateCommonVariablesrê  Þ  sŽ   € Ø—j‘jÐ!2°BÓ7€Oô ×%Ñ%×2Ñ2°?ÓC€LØ(4×(>Ñ(>Ó(@Ð�nÑ%ð Œr�z‰z�~‰~Ð6¸Ó;Ó;¸tÄrÇzÁzÇ~Á~Ø  "óHó @ð -/Ð˜.Ò)à,.Ð˜.Ò)r   )T)#rh  ri  r   r¨  rP   r«  Ú
gyp.commonr   Úgyp.MSVSUtilr›   Úgyp.MSVSVersionÚcompiler   r   r+   r-   r8   r>   rB   rN   r_   rt   rv   ry  rp  r]   rh   r˜  ri   r´  r¼  rÀ  rÒ  rÝ  rê  rd   r   r   Ú<module>rï     s·   ðñ
ó
 Û 	Û 	Û Û 
å !Û Û à—z’z )Ó,Ð ô%òPMò$Bò ò
ò
òò.ò*$÷8g0ñ g0òT÷:$ñ :$ðz €
òòò
ò%òP	ò/ò9òxPó&/r   