Ë
    Ï"Kb(,  ã                   óH   — d Z ddlZddlZddlZddlZddlZd„ Zd„ Z	d„ Z
d„ Zy)aÅ  Xcode-ninja wrapper project file generator.

This updates the data structures passed to the Xcode gyp generator to build
with ninja instead. The Xcode project itself is transformed into a list of
executable targets, each with a build step to build with ninja, and a target
with every source and resource file.  This appears to sidestep some of the
major performance headaches experienced using complex projects and large number
of targets within Xcode.
é    Nc                 ó°  — t         j                  j                  | «      \  }}|dz   }|d   }|j                  r*t         j                  j	                  |j                  |«      }	 t        j
                  |«       d}| |fD ]x  }	t         j                  j                  t         j                  j                  |	«      «      d   dz   }
t        j                  j                  j                  d|
z   «      }
|d|
z  z  }Œz |d	z  }t         j                  j	                  |d
«      }	 t        |d«      5 }|j                  «       }||k(  r
	 ddd«       y	 ddd«       t        |d«      5 }|j#                  |«       ddd«       y# t        $ r)}|j                  t        j                  k7  r‚ Y d}~�Œ0d}~ww xY w# 1 sw Y   ŒexY w# t         $ r Y Œsw xY w# 1 sw Y   yxY w)z8 Create a workspace to wrap main and sources gyp paths. z.xcworkspaceÚoptionsNzC<?xml version="1.0" encoding="UTF-8"?>
<Workspace version = "1.0">
r   z
.xcodeprojzgroup:z$  <FileRef location = %s></FileRef>
z</Workspace>
zcontents.xcworkspacedataÚrÚw)ÚosÚpathÚsplitextÚgenerator_outputÚjoinÚmakedirsÚOSErrorÚerrnoÚEEXISTÚbasenameÚxmlÚsaxÚsaxutilsÚ	quoteattrÚopenÚreadÚIOErrorÚwrite)Úmain_gypÚsources_gypÚparamsÚbuild_file_rootÚbuild_file_extÚworkspace_pathr   ÚeÚoutput_stringÚgyp_nameÚnameÚworkspace_fileÚ
input_fileÚinput_stringÚoutput_files                  ú1/usr/lib/python3/dist-packages/gyp/xcode_ninja.pyÚ_WriteWorkspacer(      sº  € ä&(§g¡g×&6Ñ&6°xÓ&@Ñ#€?�NØ" ^Ñ3€.Ø�9Ñ€'Ø×ÒÜ—W‘W—\‘\ '×":Ñ":¸NÓK€NðÜ‡K�K�Ôð2€-à˜[Ð)ò D€hÜ�7‰7×ÑœBŸG™G×,Ñ,¨XÓ6Ó7¸Ñ:¸\ÑI€DÜ�7‰7×Ñ×%Ñ% h°¡oÓ6€DØÐ<¸tÑCÑC�MðDð Ð#Ñ#€-ä—7‘7—<‘< Ð0JÓK€.ð	Ü	ˆn˜cÓ	"ð  jØ—_‘_Ó&€lØ	˜Ò	&Ø÷ð à	&÷ô ˆN˜CÓ ð % KØ×Ñ�mÔ$÷%ð %øô- 
ò Ø‡w�w”%—,‘,ÒØõ ûðú÷ð ûô 
ò 	áð	ú÷%ð %úsT   Á$E< Ä F= Ä,F1ÅF= ÅF= Å!GÅ<	F.ÆF)Æ)F.Æ1F:Æ6F= Æ=	G	ÇG	ÇGc           	      ó`  — d}d}|rx|d   }t         j                  j                  |j                  t        j
                  j                  j                  |«      «      }|j                  di «      j                  dd«      }| j                  d«      }| j                  d|«      }| j                  d«      }i }||d<   ||d<   |r||d<   | j                  d	«      |d	<   | j                  d
«      |d
<   i |d<   i }	|rd|z  |	d<   d| v rh| d   j                  «       D ]R  }
| d   |
   j                  di «      }d|v rd|	d<   |d   |	d<   dD ]  }||v sŒ||   |	|<   Œ i |d   |
<   |	|d   |
   d<   ŒT | j                  dd«      |d<   | j                  dd«      |d<   | j                  dd«      |d<   | j                  dd«      |d<   | j                  dd«      |d<   | d   |d<   |rPd|z  g g ddt         j                  d   z  dd|	d   |gd|z  dœg|d <   |dkD  r|d    d   d!   j                  d"|f«       |S )#z- Create fake target for xcode-ninja wrapper. Nr   r   Úgenerator_flagsÚxcode_ninja_jobsÚtarget_nameÚproduct_nameÚproduct_extensionÚtoolsetÚdefault_configurationÚconfigurationsz-%s/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)ÚCONFIGURATION_BUILD_DIRÚxcode_settingsÚIPHONEOS_DEPLOYMENT_TARGETÚNOÚCODE_SIGNING_REQUIRED)ÚBUNDLE_LOADERÚ	TEST_HOSTÚ
mac_bundleÚmac_xctest_bundleÚios_app_extensionÚios_watchkit_extensionÚios_watchkit_appÚtypezCompile and copy %s via ninjaÚenvzPATH=%sÚPATHÚninjaz-C)Úaction_nameÚinputsÚoutputsÚactionÚmessageÚactionsrE   z-j)r   r   r   Útoplevel_dirÚgypÚ	generatorrA   ÚComputeOutputDirÚgetÚkeysÚenvironÚextend)Úold_specr   Úninja_toplevelÚjobsr   r,   r-   r.   Úninja_targetÚnew_xcode_settingsÚconfigÚold_xcode_settingsÚkeys                r'   Ú_TargetFromSpecrX   8   së  € ð €.Ø	
€$ÙØ�YÑ€Gä
�‰�‰�W×)Ñ)Ü—]‘]×(Ñ(×9Ñ9¸&ÓAó	Cð ð �:‰:Ð'¨Ó,×0Ñ0Ð1CÀQÓG€Dà—‘˜]Ó+€+Ø—‘˜n¨kÓ:€,Ø—l‘lÐ#6Ó7Ðà€,Ø +€,ˆ}ÑØ!-€,ˆ~ÑÙØ(9€LÐ$Ñ%Ø$ŸL™L¨Ó3€,ˆyÑØ*2¯,©,Ð7NÓ*O€,Ð&Ñ'Ø#%€,ÐÑ ð ÐÙà7¸.ÑHð Ð0Ñ1ð ˜Ñ!ØÐ+Ñ,×1Ñ1Ó3ò ˆàÐ!Ñ" 6Ñ*×.Ñ.Ð/?ÀÓDð à	%Ð);Ñ	;Ø6:ÐÐ2Ñ3àÐ;Ñ<ð 	Ð7Ñ8à/ò <ˆ#ØÐ$Ò$Ø$6°sÑ$;Ð
˜SÒ
!ð<ð 02€lÐ#Ñ$ VÑ,à
ð Ð#Ñ$ VÑ,Ð-=Ò>ðð  (Ÿ|™|¨L¸!Ó<€,ˆ|ÑØ&.§l¡lÐ3FÈÓ&J€,Ð"Ñ#Ø&.§l¡lÐ3FÈÓ&J€,Ð"Ñ#à‡l�lÐ+¨QÓ/ð Ð'Ñ(à%-§\¡\Ð2DÀaÓ%H€,Ð!Ñ"Ø! &Ñ)€,ˆvÑÙð 7¸ÑDØØà
Ø
”b—j‘j Ñ(Ñ
(Ø
Ø
Ø
Ð6Ñ
7Ø
ð
ð 3°[Ñ@ñð€L�Ñð  ˆa‚xØ�9Ñ˜aÑ  Ñ*×1Ñ1°4¸°,Ô?Ø	Ðó    c                 ó  — |j                  d«      }| �t        j                  | |«      ryt        |j                  dd«      «      dk7  s*|j                  dd«      dk(  r/|j                  dd«      d	k7  r|�t        j                  ||«      sy
yy
)ap  Limit targets for Xcode wrapper.

  Xcode sometimes performs poorly with too many targets, so only include
  proper executable targets, with filters to customize.
  Arguments:
    target_extras: Regular expression to always add, matching any target.
    executable_target_pattern: Regular expression limiting executable targets.
    spec: Specifications for target.
  r,   Tr:   r   r>   Ú Ú
executabler.   ÚbundleF)rL   ÚreÚsearchÚint)Útarget_extrasÚexecutable_target_patternÚspecr,   s       r'   ÚIsValidTargetForWrapperrd   ƒ   sŠ   € ð —‘˜Ó'€+àÐ¤2§9¡9¨]¸KÔ#HØô 
ˆ$�(‰(Ð&¨Ó
*Ó+¨qÒ0Ø‡x�x�˜Ó˜|Ò+Ø‡x�xÐ# RÓ(¨HÒ4ð !Ð,Ü�Y‰YÐ0°+Ô>ØØØ	rY   c                 ó0  — |d   d   }|j                  «       D ]  \  }}||k(  sŒ|d   }Œ |j                  di «      }|j                  dd«      }	|	€*t        j                  j	                  |«      \  }
}|
dz   |z   }	g }i }i }i ||	<   g ||	   d<   g ||	   d	<   ||   j                  d
i «      ||	   d
<   |j                  dd«      }|j                  dd«      }| D ]Ÿ  }||   }t        |||«      sŒ|j                  d«      }|	›d|›d�}|j                  |«       t        ||«      ||<   ||j                  d«      d      d	   D ]4  }|d   |k(  sŒi }|d   |d<   |d   |d<   ||	   d	   j                  |«       Œ6 Œ¡ d}t        |dddddœd«      }ddgii|d<   |j                  dd«       }g }|j                  «       D �]k  \  }}t        j                  j                  |«      }|j                  dg «      |j                  dg «      z   }|s4|j                  |j                  dg «      |j                  dg «      z   «       |j                  dg «      D ]G  }|j                  |j                  d g «      «       |rŒ'|j                  |j                  d!g «      «       ŒI |D � cg c]  } | j                  d"«      rŒ| ‘Œ }} t        j                  j                  |	«      }!||D � cg c]@  } t        j                  j                  t        j                  j                  || «      |!«      ‘ŒB c} z  }�Œn t        t        |«      «      |d<   t        j                  j                  t        j                  j                  |	«      |d#z   «      }"|"›d|›d�}#|j                  |#«       |||#<   i }|d   |d<   ||d<   d|d<   i ||"<   g ||"   d	<   g ||"   d<   ||   j                  d
i «      ||"   d
<   ||"   d	   j                  |«       t!        |	|"|«       |||fS c c} w c c} w )$aš  Initialize targets for the ninja wrapper.

  This sets up the necessary variables in the targets to generate Xcode projects
  that use ninja as an external builder.
  Arguments:
    target_list: List of target pairs: 'base/base.gyp:base'.
    target_dicts: Dict of target properties keyed on target pair.
    data: Dict of flattened build files keyed on gyp path.
    params: Dict of global options for gyp.
  Úbuild_filesr   Ú_DEPTHr*   Úxcode_ninja_main_gypNz.ninjaÚincluded_filesÚtargetsr3   Ú%xcode_ninja_executable_target_patternÚxcode_ninja_target_patternr,   ú:z#targetr/   Úsources_for_indexingÚtargetÚDefaultÚ0r\   )r,   r/   r0   r9   r>   Úinclude_dirsr1   Úxcode_ninja_list_excluded_filesTÚsourcesÚmac_bundle_resourcesÚsources_excludedÚmac_bundle_resources_excludedrG   rC   Úinputs_excludedú$z.gyp)ÚitemsrL   r   r   r	   rd   ÚappendrX   ÚsplitÚdirnamerO   Ú
startswithÚrelpathr   ÚsortedÚsetr(   )$Útarget_listÚtarget_dictsÚdatar   Úorig_gypr!   Úgyp_dictÚdepthr*   r   r   r   Únew_target_listÚnew_target_dictsÚnew_datarb   ra   Úold_qualified_targetrc   r,   Únew_target_nameÚ
old_targetÚnew_data_targetÚsources_target_nameÚsources_targetÚskip_excluded_filesrt   ro   Útarget_dictÚbaseÚfilesrE   ÚfileÚrelative_pathr   Úfully_qualified_target_names$                                       r'   ÚCreateWrapperr˜   ž   sÍ  € ð �MÑ" 1Ñ%€(Ø ŸJ™J›Lò !Ñ€h�Ø�8ÓØ�xÑ �eð!ð —J‘JÐ0°"Ó5€/Ø× Ñ Ð!7¸Ó>€(ØÐÜ(*¯©×(8Ñ(8¸Ó(BÑ%€_�nØ Ñ)¨NÑ:€Hð €/ØÐØ€(ð €(ˆ8ÑØ)+€(ˆ8ÑÐ%Ñ&Ø"$€(ˆ8Ñ�YÑà
ˆ8�n×ÑÐ)¨2Ó.ð ˆ8ÑÐ%Ñ&ð ×ÑÐAÀ4ÓHð ð
 "×%Ñ%Ð&BÀDÓI€-à)ò @ÐØÐ,Ñ-€DÜ˜}Ð.GÈÕNà—H‘H˜]Ó+€kÚ*2²KÐ@€oØ×Ñ˜_Ô-ô +:¸$ÀÓ*GÐ�Ñ'ð Ð1×7Ñ7¸Ó<¸QÑ?Ñ@ÀÑKò @ˆ*Ø�mÑ$¨Ó3Øˆ/Ø+5°mÑ+Dˆ/˜-Ñ
(Ø'1°)Ñ'<ˆ/˜)Ñ
$Ø
�8Ñ
˜YÑ
'×
.Ñ
.¨Õ
?ñ@ð@ð( /ÐÜ"Ø)ØØ(ØØñ	ð
 ó€.ð '0°>ÀUÀ9Ð1NÐ%P€.Ð!Ñ"ð ×
Ñ
Ð?ÀÓ
FÐFð ð €'Ø)×/Ñ/Ó1ó (Ñ€fˆkÜ�7‰7�?‰?˜6Ó"€DØ�O‰O˜I rÓ*Ø�O‰OÐ2°BÓ7ñ8€Eñ Ø‡l�l�;—?‘?Ð#5°rÓ:Ø—?‘?Ð#BÀBÓGñHô Ið —/‘/ )¨RÓ0ò 8ˆØ‡l�l�6—:‘:˜h¨Ó+Ô,â Ø�‰�V—Z‘ZÐ 1°2Ó6Õ7ð	8ð  %ÖA�t¨D¯O©O¸CÕ,@ŠdÐA€EÐAô —G‘G—O‘O HÓ-€MØØ %ö(Øô —‘—‘¤§¡§¡¨d°DÓ!9¸=ÕIò (ñ (‚Gð+(ô0 %¤S¨£\Ó2€.�Ñô 	‡g�g‡l�l”2—7‘7—?‘? 8Ó,Ð.AÀFÑ.JÓKð ò $Ò%8Ð9ð ð ×ÑÐ4Ô5Ø2@ÐÐ.Ñ/Ø€/Ø#1°-Ñ#@€/�-Ñ Ø#€/�(ÑØ'€/�)ÑØ€(ˆ;ÑØ%'€(ˆ;Ñ˜	Ñ"Ø,.€(ˆ;ÑÐ(Ñ)à
ˆ8�n×ÑÐ)¨2Ó.ð ˆ;ÑÐ(Ñ)à
ˆ;Ñ˜	Ñ"×)Ñ)¨/Ô:ô �(˜K¨Ô0Ø
Ð+¨XÐ	6Ð6ùò? Bùò(s   ÊPÊ5PËAP)Ú__doc__r   Úgyp.generator.ninjarI   r   r^   Úxml.sax.saxutilsr   r(   rX   rd   r˜   © rY   r'   ú<module>r�      s3   ðñ
ó Û Û 	Û 	Û ò %òDIòVó6C7rY   