o
    WªodŒO ã                   @  s®  d dl mZ d dlZd dlZd dlZd dlZddlmZ ddlm	Z	 ddlm
Z
 ddlmZ dd	lmZ dd
lmZmZ ejrEddlmZ dZi dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd “d!d“d"d#“d$d%“d&d'“d(d)“d*d)i¥Zd+d,d-d.d/d0œZdd1d1d2d3d4d(d5œZd6d7d8œZh d9£ZG d:d;„ d;ƒZG d<d=„ d=ƒZG d>d?„ d?ƒZG d@dA„ dAƒZG dBdC„ dCƒZG dDdE„ dEƒZG dFdG„ dGƒZG dHdI„ dIejƒZ dS )Jé    )ÚannotationsNé   )Úbackendsé   )Úbuild)Údependencies)Úmesonlib)Úmlog)ÚMesonExceptionÚ	OptionKey)ÚInterpreterú	Úczsourcecode.c.cÚaz
archive.arÚcczsourcecode.cpp.cppÚcxxÚcppzc++Úmzsourcecode.c.objcÚmmzsourcecode.cpp.objcppÚhzsourcecode.c.hÚhppzsourcecode.cpp.hZhxxZhhzsourcecode.cpp.hhZincÚswiftzsourcecode.swiftÚdylibzcompiled.mach-o.dylibÚozcompiled.mach-o.objfileÚszsourcecode.asmZasmÚCZ	CPLUSPLUSZOBJCZOBJCPLUSPLUSZSWIFT_)r   r   ÚobjcÚobjcppr   Ú0Ú1Ú2Ú3)Úplainr   Úgr   r    r!   r   ÚYESÚNO)TF>   z.az.soú.oú.objz.dylibc                   @  s   e Zd Zdd„ ZdS )ÚFileTreeEntryc                 C  s   i | _ g | _d S ©N)ÚsubdirsÚtargets©Úself© r.   ú~home/ych/rk3568/buildroot/output/rockchip_rk3568_recovery/host/lib/python3.10/site-packages/mesonbuild/backend/xcodebackend.pyÚ__init__D   ó   
zFileTreeEntry.__init__N©Ú__name__Ú
__module__Ú__qualname__r0   r.   r.   r.   r/   r(   B   s    r(   c                   @  ó   e Zd Zddd„ZdS )ÚPbxItemÚ c                 C  s   || _ || _d S r)   ©ÚvalueÚcomment©r-   r:   r;   r.   r.   r/   r0   I   r1   zPbxItem.__init__N©r8   r2   r.   r.   r.   r/   r7   H   ó    r7   c                   @  s&   e Zd Zdd„ Zd	dd„Zdd„ ZdS )
ÚPbxArrayc                 C  s
   g | _ d S r)   )Úitemsr,   r.   r.   r/   r0   N   ó   
zPbxArray.__init__r8   c                 C  s0   t |tƒr| j |¡ d S | j t||ƒ¡ d S r)   )Ú
isinstanceÚPbxArrayItemr@   Úappend)r-   Úitemr;   r.   r.   r/   Úadd_itemQ   s   
zPbxArray.add_itemc                 C  s€   |  d¡ |d7 }| jD ]$}|jr#|  |t |j› d|j› d ¡ q|  |t |j› d ¡ q|d8 }|  |t d ¡ d S )Nz(
r   ú z,
z);
)Úwriter@   r;   ÚINDENTr:   ©r-   ÚofileÚindent_levelÚir.   r.   r/   rH   W   s   

$zPbxArray.writeNr=   )r3   r4   r5   r0   rF   rH   r.   r.   r.   r/   r?   M   s    
r?   c                   @  r6   )rC   r8   c                 C  s8   || _ |rd|v r|| _d S d|› d| _d S || _d S ©Nz/*ú/* ú */r9   r<   r.   r.   r/   r0   c   s   

zPbxArrayItem.__init__Nr=   r2   r.   r.   r.   r/   rC   b   r>   rC   c                   @  s   e Zd Zdd„ Zdd„ ZdS )Ú
PbxCommentc                 C  s,   t |tƒsJ ‚d|vsJ ‚d|› d| _d S rN   )rB   ÚstrÚtext)r-   rS   r.   r.   r/   r0   n   s   zPbxComment.__init__c                 C  s   |  d| j› d¡ d S )NÚ
)rH   rS   )r-   rK   rL   r.   r.   r/   rH   s   s   zPbxComment.writeN)r3   r4   r5   r0   rH   r.   r.   r.   r/   rQ   m   s    rQ   c                   @  r6   )ÚPbxDictItemr8   c                 C  s>   || _ || _|rd|v r|| _d S d|› d| _d S || _d S rN   )Úkeyr:   r;   )r-   rV   r:   r;   r.   r.   r/   r0   w   s   

zPbxDictItem.__init__Nr=   r2   r.   r.   r.   r/   rU   v   r>   rU   c                   @  s6   e Zd Zdd„ Zddd„Zdd„ Zdd	„ Zd
d„ ZdS )ÚPbxDictc                 C  s   t ƒ | _g | _d S r)   )ÚsetÚkeysr@   r,   r.   r.   r/   r0   ƒ   s   
zPbxDict.__init__r8   c                 C  s6   || j vsJ ‚t|||ƒ}| j  |¡ | j |¡ d S r)   )rY   rU   Úaddr@   rD   )r-   rV   r:   r;   rE   r.   r.   r/   rF   ‰   s   zPbxDict.add_itemc                 C  s
   || j v S r)   )rY   )r-   rV   r.   r.   r/   Úhas_item   rA   zPbxDict.has_itemc                 C  s<   t |tƒr| j ttƒ¡ d S t |tƒsJ ‚| j |¡ d S r)   )rB   rR   r@   rD   rQ   )r-   r;   r.   r.   r/   Úadd_comment’   s   
zPbxDict.add_commentc              
   C  sÖ  |  d¡ |d7 }| jD ]¿}t|tƒr|  ||¡ qt|tƒrÄt|jttfƒrR|jr@|  |t	 |j
› d|j› d|j› d ¡ q|  |t	 |j
› d|j› d ¡ qt|jtƒr‚|jrm|  |t	 |j
› d|j› d ¡ n|  |t	 |j
› d ¡ |j  ||¡ qt|jtƒr²|jr|  |t	 |j
› d|j› d ¡ n|  |t	 |j
› d ¡ |j  ||¡ qt|ƒ t|j
ƒ t|jƒ tdƒ‚t|ƒ tdƒ‚|d8 }|  |t	 d ¡ |d	krä|  d
¡ d S |  d¡ d S )Nz{
r   z = rG   z;
zmissing codezmissing code2Ú}r   rT   )rH   r@   rB   rQ   rU   r:   rR   Úintr;   rI   rV   rW   r?   ÚprintÚRuntimeErrorrJ   r.   r.   r/   rH   ™   s>   



,$$$

zPbxDict.writeNr=   )r3   r4   r5   r0   rF   r[   r\   rH   r.   r.   r.   r/   rW   ‚   s    
rW   c                      sò  e Zd ZdZd|‡ fdd„Zdd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ Zd<d=„ Zd>d?„ Z d@dA„ Z!dBdC„ Z"dDdE„ Z#dFdG„ Z$dHdI„ Z%dJdK„ Z&dLdM„ Z'dNdO„ Z(dPdQ„ Z)dRdS„ Z*dTdU„ Z+dVdW„ Z,dXdY„ Z-dZd[„ Z.d\d]„ Z/d^d_„ Z0d`da„ Z1dbdc„ Z2ddde„ Z3dfdg„ Z4dhdi„ Z5djdk„ Z6dldm„ Z7dndo„ Z8dpdq„ Z9drds„ Z:dtdu„ Z;dvdw„ Z<dxdy„ Z=dzd{„ Z>‡  Z?S )}ÚXCodeBackendZxcoder   úT.Optional[build.Build]ÚinterpreterúT.Optional[Interpreter]c                   sØ   t ƒ  ||¡ | jjjd  dd¡d d… | _| jj tdƒ¡| _	|  
¡ | _|  
¡ | _|  
¡ | _|  
¡ | _| j	g| _|  
¡ | _|  
¡ | _|  
¡ | _|  
¡ | _|  
¡ | _|  
¡ | _|  
¡ | _tƒ | _i | _i | _i | _d S )NÚdefaultú-r8   é   Ú	buildtype)Úsuperr0   ÚenvironmentÚcoredataZ
lang_guidsÚreplaceÚproject_uidÚ
get_optionr   rh   Úgen_idÚproject_conflistÚmaingroup_idÚall_idÚall_buildconf_idÚ
buildtypesÚtest_idÚtest_command_idÚtest_buildconf_idÚregen_idÚregen_command_idÚregen_buildconf_idÚregen_dependency_idrW   Útop_level_dictÚgenerator_outputsÚbuildfile_idsÚfileref_ids)r-   r   rc   ©Ú	__class__r.   r/   r0   Å   s&    












zXCodeBackend.__init__c                 C  s\   |d }t |ddd}| d¡ | |d¡ W d   ƒ n1 s!w   Y  t ||¡ d S )Nz.tmpÚwzutf-8)Úencodingz// !$*UTF8*$!
r   )ÚopenrH   Úosrl   )r-   r|   Z	ofilenameZtmpnamerK   r.   r.   r/   Úwrite_pbxfileâ   s   
þzXCodeBackend.write_pbxfilec                 C  s    t t ¡ ƒ ¡  dd¡d d… S )Nrf   r8   rg   )rR   ÚuuidZuuid4Úupperrl   r,   r.   r.   r/   ro   é   s    zXCodeBackend.gen_idc                 C  s$   t j | ¡ | jj tdƒ¡¡}|S )Nrh   )r…   ÚpathÚjoinÚ
get_subdirrj   rk   rn   r   ©r-   ÚtargetÚdirnamer.   r.   r/   Úget_target_dirì   s    zXCodeBackend.get_target_dirc                 C  s*   |  ¡ }tjtj | j ¡ |¡dd |S )NT©Úexist_ok)r‹   r…   Úmakedirsr‰   rŠ   rj   Úget_build_dirrŒ   r.   r.   r/   Úget_custom_target_output_dirñ   s   z)XCodeBackend.get_custom_target_output_dirc                 C  sB   |   |¡dkr	dS tj |   |¡¡ tj¡}tj dgt|ƒ ¡S )Nr8   z..)r   r…   r‰   ÚnormpathÚsplitÚseprŠ   Úlen)r-   r   Zdirectoriesr.   r.   r/   Útarget_to_build_rootö   s   z!XCodeBackend.target_to_build_rootc           	   
   C  sj   | j j}| j}| ¡ }d}t|tjƒr|j}tj	 
tj	 |¡¡d }|› d|› d|› d|› d|› d
}|S )NÚx86_64r   z.build/ú/z.build/Objects-normal/r&   )r   Úproject_namerh   Úget_idrB   r   ÚFileÚfnamer…   r‰   ÚsplitextÚbasename)	r-   r   ÚsourceÚprojectrh   ÚtnameÚarchÚstemZobj_pathr.   r.   r/   Úobject_filename_from_sourceü   s   "z(XCodeBackend.object_filename_from_sourcec                 C  s8  |   ¡  | j ¡ | _| j ¡ | _|  ¡  |  ¡  |  ¡  |  	¡  |  
¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  tj | j ¡ | jjd ¡| _tj| jdd tj | jd¡| _ |  !| j"¡}| #t$dƒ¡ |  %|¡ | #t$dƒ¡ | #t$dƒ¡ |  &|¡ | #t$dƒ¡ | #t$d	ƒ¡ |  '|¡ | #t$d
ƒ¡ | #t$dƒ¡ |  (|¡ | #t$dƒ¡ | #t$dƒ¡ |  )|¡ | #t$dƒ¡ | #t$dƒ¡ |  *|¡ | #t$dƒ¡ | #t$dƒ¡ |  +|¡ | #t$dƒ¡ | #t$dƒ¡ |  ,|¡ | #t$dƒ¡ | #t$dƒ¡ |  -|¡ | #t$dƒ¡ | #t$dƒ¡ |  .|¡ | #t$dƒ¡ | #t$dƒ¡ |  /|¡ | #t$dƒ¡ | #t$dƒ¡ |  0|¡ | #t$dƒ¡ | #t$dƒ¡ |  1|¡ | #t$dƒ¡ | #t$dƒ¡ |  2|¡ | #t$d ƒ¡ |  3| j"¡ |  4| j"| j ¡ |  5¡  d S )!Nz
.xcodeprojTr   zproject.pbxprojz Begin PBXAggregateTarget sectionzEnd PBXAggregateTarget sectionzBegin PBXBuildFile sectionzEnd PBXBuildFile sectionzBegin PBXBuildStyle sectionzEnd PBXBuildStyle sectionz#Begin PBXContainerItemProxy sectionz!End PBXContainerItemProxy sectionzBegin PBXFileReference sectionzEnd PBXFileReference sectionz%Begin PBXFrameworksBuildPhase sectionz#End PBXFrameworksBuildPhase sectionzBegin PBXGroup sectionzEnd PBXGroup sectionzBegin PBXNativeTarget sectionzEnd PBXNativeTarget sectionzBegin PBXProject sectionzEnd PBXProject sectionz&Begin PBXShellScriptBuildPhase sectionz$End PBXShellScriptBuildPhase sectionz"Begin PBXSourcesBuildPhase sectionz End PBXSourcesBuildPhase sectionz!Begin PBXTargetDependency sectionzEnd PBXTargetDependency sectionz"Begin XCBuildConfiguration sectionz End XCBuildConfiguration sectionz!Begin XCConfigurationList sectionzEnd XCConfigurationList section)6Zserialize_testsr   Zget_build_targetsÚbuild_targetsÚget_custom_targetsÚcustom_targetsÚgenerate_filemapÚgenerate_buildstylemapÚgenerate_build_phase_mapÚ generate_build_configuration_mapÚ$generate_build_configurationlist_mapÚ#generate_project_configurations_mapÚ$generate_buildall_configurations_mapÚ generate_test_configurations_mapÚgenerate_native_target_mapÚgenerate_native_frameworks_mapÚgenerate_custom_target_mapÚgenerate_generator_target_mapÚgenerate_source_phase_mapÚgenerate_target_dependency_mapÚgenerate_pbxdep_mapÚgenerate_containerproxy_mapÚgenerate_target_file_mapsÚgenerate_build_file_mapsr…   r‰   rŠ   rj   r“   rœ   Zproj_dirr’   Z	proj_fileÚgenerate_prefixr|   r\   rQ   Úgenerate_pbx_aggregate_targetÚgenerate_pbx_build_fileÚgenerate_pbx_build_styleÚ!generate_pbx_container_item_proxyÚgenerate_pbx_file_referenceÚ"generate_pbx_frameworks_buildphaseÚgenerate_pbx_groupÚgenerate_pbx_native_targetÚgenerate_pbx_projectÚgenerate_pbx_shell_build_phaseÚ generate_pbx_sources_build_phaseÚgenerate_pbx_target_dependencyÚgenerate_xc_build_configurationÚgenerate_xc_configurationListÚgenerate_suffixr†   Zgenerate_regen_info©r-   Úobjects_dictr.   r.   r/   Úgenerate	  sŒ   













zXCodeBackend.generatec                 C  s4   |  d¡d }|dkrd}t | ¡ ¡}|sd}|S )NÚ.éÿÿÿÿr   r   zsourcecode.unknown)r–   ÚXCODETYPEMAPÚgetÚlower)r-   rŸ   Ú	extensionÚ	xcodetyper.   r.   r/   Úget_xcodetypeR  s   zXCodeBackend.get_xcodetypec                 C  sž   i | _ i | _| j ¡ D ]A\}}|jD ]}t|tjƒr*tj	 
|j|j¡}|  ¡ | j |< q|jD ]}t|tƒrDtj	 
|j|¡}|  ¡ | j |< q.|  ¡ | j|< qd S r)   )ÚfilemapÚtarget_filemapr¨   r@   ÚsourcesrB   r   rž   r…   r‰   rŠ   ÚsubdirrŸ   ro   ÚobjectsrR   )r-   ÚnameÚtr   r   r.   r.   r/   r«   [  s   
€

€÷zXCodeBackend.generate_filemapc                 C  ó   | j |  ¡ i| _d S r)   )rh   ro   Úbuildstylemapr,   r.   r.   r/   r¬   i  ó   z#XCodeBackend.generate_buildstylemapc                 C  sV   | j  ¡ D ]#\}}i |_|  ¡ |j|< |  ¡ |jd< |  ¡ |jd< |  ¡ |jd< qd S )NÚ
FrameworksÚ	ResourcesÚSources)r¨   r@   Úbuildphasemapro   )r-   r¤   rÞ   r.   r.   r/   r­   l  s   ùz%XCodeBackend.generate_build_phase_mapc                 C  sR   i | _ | jD ]}| j|  ¡ i}|| j |< q| jD ]}| j|  ¡ i}|| j |< qd S r)   )Úbuildconfmapr¨   rh   ro   rª   )r-   rÞ   Zbconfsr.   r.   r/   r®   v  s   

þz-XCodeBackend.generate_build_configuration_mapc                 C  rß   r)   )rh   ro   Úproject_configurationsr,   r.   r.   r/   r°     rá   z0XCodeBackend.generate_project_configurations_mapc                 C  rß   r)   )rh   ro   Úbuildall_configurationsr,   r.   r.   r/   r±   ‚  rá   z1XCodeBackend.generate_buildall_configurations_mapc                 C  rß   r)   )rh   ro   Útest_configurationsr,   r.   r.   r/   r²   …  rá   z-XCodeBackend.generate_test_configurations_mapc                 C  s>   i | _ | jD ]	}|  ¡ | j |< q| jD ]	}|  ¡ | j |< qd S r)   )Úbuildconflistmapr¨   ro   rª   ©r-   rÞ   r.   r.   r/   r¯   ˆ  s   

ÿz1XCodeBackend.generate_build_configurationlist_mapc                 C  ó$   i | _ | jD ]	}|  ¡ | j |< qd S r)   )Únative_targetsr¨   ro   rë   r.   r.   r/   r³     ó   
ÿz'XCodeBackend.generate_native_target_mapc                 C  s|   i | _ i | _i | _| j ¡ D ]-\}}|  ¡ | j |< t|tjƒs q|  	|¡\}}}|D ]}|  ¡ | j|< |  ¡ | j|< q*qd S r)   )
Úshell_targetsÚcustom_target_output_buildfileÚcustom_target_output_filerefrª   r@   ro   rB   r   ÚCustomTargetÚeval_custom_target_command)r-   r¤   rÞ   ÚsrcsÚ
ofilenamesÚcmdr   r.   r.   r/   rµ   ”  s   þûz'XCodeBackend.generate_custom_target_mapc                 C  s¤   i | _ i | _| j ¡ D ]\}}d}|jD ]}t|tjƒsq|  ||||¡ |d7 }qq| j	 ¡ D ]\}}d}|j
D ]}t|tjƒsBq9|  ||||¡ |d7 }q9q0d S ©Nr   r   )Úgenerator_fileref_idsÚgenerator_buildfile_idsr¨   r@   Ú	generatedrB   r   ÚGeneratedListÚgen_single_target_maprª   rÚ   )r-   r¤   rÞ   Úgenerator_idÚgenlistr.   r.   r/   r¶   ¡  s&   

ü

üþz*XCodeBackend.generate_generator_target_mapc                 C  sÚ   ||f}|| j vsJ ‚|  ¡ | j |< g }| ¡ D ]!}| |¡D ]}tj |  |¡|¡}	| tj | j	 
¡ |	¡¡ qq|| jvsAJ ‚|| j|< g }
g }tt|ƒƒD ]}|
 |  ¡ ¡ | |  ¡ ¡ qP|
| j|< || j|< d S r)   )rï   ro   Ú
get_inputsÚget_outputs_forr…   r‰   rŠ   Úget_target_private_dirrD   rj   r“   r}   Úranger˜   rù   rø   )r-   rþ   r¤   rÞ   rý   ÚkÚ	ofile_absrM   Úo_baser   r~   r   r.   r.   r/   rü   ¶  s$   þ

z"XCodeBackend.gen_single_target_mapc                 C  sb   i | _ i | _| j ¡ D ]#}| ¡ D ]}t|tjƒr-|jD ]}|  	¡ | j |< |  	¡ | j|< qqqd S r)   )
Únative_frameworksÚnative_frameworks_filerefr¨   ÚvaluesÚget_external_depsrB   r   ÚAppleFrameworksÚ
frameworksro   )r-   rÞ   ÚdepÚfr.   r.   r/   r´   É  s   
€üÿz+XCodeBackend.generate_native_frameworks_mapc                 C  s®   i | _ | j ¡ D ]2\}}|jD ]*}t|tjƒr%||j ¡ f}|| j v r$qn|| ¡ f}|| j vs2J ‚|  	¡ | j |< qq| j
 ¡ D ]\}}|}|| j vsMJ ‚|  	¡ | j |< q@d S r)   )Ztarget_dependency_mapr¨   r@   Úlink_targetsrB   r   ÚCustomTargetIndexr   Úget_basenamero   rª   )r-   r¤   rÞ   r   r  r.   r.   r/   r¸   Ó  s"   

ÿø	ýz+XCodeBackend.generate_target_dependency_mapc                 C  sD   i | _ i | _| jD ]	}|  ¡ | j |< q	| jD ]	}|  ¡ | j|< qd S r)   )Úpbx_dep_mapÚpbx_custom_dep_mapr¨   ro   rª   rë   r.   r.   r/   r¹   ä  s   

ÿz XCodeBackend.generate_pbxdep_mapc                 C  rì   r)   )Úcontainerproxy_mapr¨   ro   rë   r.   r.   r/   rº   ì  rî   z(XCodeBackend.generate_containerproxy_mapc                 C  s   |   | j¡ |   | j¡ d S r)   )Úgenerate_target_file_maps_implr¨   rª   r,   r.   r.   r/   r»   ñ  s   z&XCodeBackend.generate_target_file_mapsc                 C  s:  |  ¡ D ]–\}}|jD ]7}t|tjƒrtj |j|j	¡}t|t
ƒs"q||f}|| jvs-J ‚|  ¡ | j|< || jvs;J ‚|  ¡ | j|< qt|dƒsIq|jD ]M}t|tjƒrUqLt|tjƒrdtj |j|j	¡}t|t
ƒr’tj |j|¡}||f}|| jvs|J ‚|  ¡ | j|< || jvsŠJ ‚|  ¡ | j|< qLtdt
|ƒ ƒ‚qd S )NrÜ   zUnknown input type )r@   rÚ   rB   r   rž   r…   r‰   rŠ   rÛ   rŸ   rR   r~   ro   r   ÚhasattrrÜ   r   ÚExtractedObjectsr`   )r-   r+   r¤   rÞ   r   r  r   r.   r.   r/   r  õ  s8   




òóz+XCodeBackend.generate_target_file_maps_implc                 C  s>   | j  ¡ D ]}t|tƒsJ ‚|  ¡ | j|< |  ¡ | j|< qd S r)   )rc   Úget_build_def_filesrB   rR   ro   r~   r   )r-   Ú	buildfiler.   r.   r/   r¼     s
   ýz%XCodeBackend.generate_build_file_mapsc                 C  rì   r)   )Úsource_phaser¨   ro   rë   r.   r.   r/   r·     rî   z&XCodeBackend.generate_source_phase_mapc                   sL  i ˆ _ ˆ  ¡ ˆ _‡ fdd„ˆ jD ƒ}‡ fdd„ˆ jD ƒ}g }| ˆ jdˆ jg ˆ jg| | f¡ | ˆ j	dˆ j
ˆ jgˆ jˆ jgf¡ | ˆ jdˆ jˆ jgg f¡ ˆ j ¡  ¡ D ]U\}}ˆ  ¡ }|ˆ j |< g }ˆ jg}	d}
|jD ]'}t|tjƒsxqo| ˆ j||
f ¡ |jD ]}|	 ˆ j| ¡  ¡ q…|
d7 }
qo| ˆ j| ¡ | ||ˆ j| ||	f¡ qWt|t d¡d	}|D ]k}tƒ }|d }|d
 }|d }|d }	| dd¡ | d|d|› d¡ tƒ }| d|¡ |D ]}| |d¡ qétƒ }| d|¡ |	D ]}| |d¡ qý| dd|› d¡ | dd|› d¡ | |d ||¡ q¸d S )Nc                   ó   g | ]}ˆ j | ‘qS r.   )r  ©Ú.0rÞ   r,   r.   r/   Ú
<listcomp>"  ó    z>XCodeBackend.generate_pbx_aggregate_target.<locals>.<listcomp>c                   r  r.   )r  r  r,   r.   r/   r  #  r  Ú	ALL_BUILDÚ	RUN_TESTSÚ
REGENERATEr   r   ©rV   r   é   é   ÚisaZPBXAggregateTargetÚbuildConfigurationListú1Build configuration list for PBXAggregateTarget "ú"ÚbuildPhasesÚShellScriptr   ÚPBXTargetDependencyrÝ   ÚproductName) Úcustom_aggregate_targetsro   Úbuild_all_tdep_idr¨   rª   rD   rr   rs   r{   ru   rw   rv   rx   rz   ry   r   r©   r@   rÚ   rB   rû   rï   Údependsr  r   rê   ÚsortedÚoperatorÚ
itemgetterrW   rF   r?   )r-   rÎ   Ztarget_dependenciesZcustom_target_dependenciesZaggregated_targetsr¤   rÞ   Zct_idZbuild_phasesr   rý   r   ÚdZsorted_aggregated_targetsZagt_dictrÝ   Zbuildconf_idZbp_arrZbpZdep_arrÚtdr.   r,   r/   r¾     st   

ý
üü



îz*XCodeBackend.generate_pbx_aggregate_targetc              	   C  s  | j  ¡ D ]!\}}| ¡ D ]5}t|tjƒrC|jD ])}tƒ }| j| }||j	vr2| 
|||› d¡ | 
dd¡ | 
d| j| |¡ qq|jD ]Y}d}	t|tjƒr_|jrVd}	tj |j|j¡}t|tƒseqGtƒ }
||f}| j| }| j| }|	rƒtj | j ¡ |¡}n
tj | j ¡ |¡}|
 
dd¡ |
 
d||¡ | 
||
¡ qG|jD ]e}t|tjƒr­q¤t|tjƒr½tj |j|j¡}nt|tƒrÊtj |j|¡}| j||f }||f}| j| }|| jvsáJ ‚|| j|< tj | j ¡ |¡}|}tƒ }| 
|||¡ | 
dd¡ | 
d||¡ q¤d}|jD ]}t|tj ƒsq|  !|||¡ |d7 }qq| j" ¡ D ]Y\}}t|tj#ƒs:q-|  $|¡\}}}|D ]#}tƒ }| 
| j%| |d	|› d
¡ | 
dd¡ | 
d| j&| ¡ qDd}|jD ]}t|tj ƒsxqm|  !|||¡ |d7 }qmq-d S )Nú.framework in Frameworksr%  ÚPBXBuildFileÚfileRefFTr   r   rO   rP   )'r¨   r@   r	  rB   r   r
  r  rW   r  rY   rF   r  rÚ   r   rž   Úis_builtr…   r‰   rŠ   rÛ   rŸ   rR   r~   r   rj   r“   Úget_source_dirrÜ   r   r  rØ   rú   rû   Úcreate_generator_shellphaserª   rò   ró   rð   rñ   )r-   rÎ   r¤   rÞ   r  r  Úfw_dictZfwkeyr   Úin_build_dirZsdictr  ÚidvalZfilerefÚfullpathr   Z	fullpath2Úo_dictrý   r#   rô   rõ   rö   Úcustom_dictr.   r.   r/   r¿   Y  sŽ   


€








ü
üöz$XCodeBackend.generate_pbx_build_filec           	      C  sr   | j ||f }| j||f }t|ƒt|ƒksJ ‚t||ƒD ]\}}tƒ }| ||¡ | dd¡ | d|¡ qd S )Nr%  r6  r7  )rù   rø   r˜   ÚziprW   rF   )	r-   rÎ   r¤   rý   Zfile_idsÚref_idsZfile_oÚref_idÚodictr.   r.   r/   r:  ¨  s   üz(XCodeBackend.create_generator_shellphasec                 C  sj   | j  ¡ D ]-\}}tƒ }| |||¡ | dd¡ tƒ }| d|¡ | dd¡ | dd|› d¡ qd S )Nr%  ZPBXBuildStyleÚbuildSettingsZCOPY_PHASE_STRIPr%   rÝ   r(  )rà   r@   rW   rF   )r-   rÎ   rÝ   r=  Z	styledictÚsettings_dictr.   r.   r/   rÀ   ²  s   ùz%XCodeBackend.generate_pbx_build_stylec                 C  sx   | j D ]6}tƒ }| | j| |d¡ | dd¡ | d| jd¡ | dd¡ | d| j| ¡ | dd	| d	 ¡ qd S )
NÚPBXContainerItemProxyr%  ZcontainerPortalúProject objectZ	proxyTyper   ZremoteGlobalIDStringZ
remoteInfor(  )r¨   rW   rF   r  rm   rí   )r-   rÎ   rÞ   Z
proxy_dictr.   r.   r/   rÁ   ½  s   
ùz.XCodeBackend.generate_pbx_container_item_proxyc           $   	   C  sL  | j  ¡ D ]ÿ\}}| ¡ D ]H}t|tjƒrV|jD ]<}tƒ }| j| }| 	|¡r)q| 
|||¡ | 
dd¡ | 
dd¡ | 
d|› d¡ | 
dd|› d¡ | 
d	d
¡ qq|jD ]“}d}	t|tjƒrr|jrid}	tj |j|j¡}t|tƒsxqZ| j||f }
tj | j ¡ |¡}tƒ }|  |¡}tj |¡}|}| 
|
||¡ | 
dd¡ | 
dd| d ¡ | 
dd¡ |	rÓ| 
dd| d ¡ | 
dd| d ¡ | 
d	d¡ qZ| 
dd| d ¡ | 
dd| d ¡ | 
d	d¡ qZd}|jD ]}t|tjƒsüqó| j||f }| j||f }t|ƒt|ƒksJ ‚t ||ƒD ]S\}}tƒ }tj |¡}| 
|||¡ |  |¡}t !|| j ¡ ¡}| 
dd¡ | 
dd| d ¡ | 
dd¡ | 
dd|› d¡ | 
dd|› d¡ | 
d	d¡ q|d7 }qó|j"D ]Ž}t|tj#ƒrqvt|tjƒrž| $| j ¡ | j %¡ ¡}tj |j|j¡}ntj |j|¡}tj | j ¡ |¡}| j||f }
t !|| j ¡ ¡}tƒ }tj |¡}| 
|
||¡ | 
dd¡ | 
dd|  |¡ d ¡ | 
dd¡ | 
dd|› d¡ | 
dd|› d¡ | 
d	d¡ qvq| j& ¡ D ]y\}}
tƒ }| 
|
||¡ | j | }| '¡ }d}t|tj(ƒr0d}|}nt|tj)ƒr?|  d¡}|}n|  |¡}d| '¡  }| 
dd¡ | 
dd| d ¡ d|v rq|d dkrq| 
dd|› d¡ n| 
d|¡ | 
d|¡ | 
d	d¡ q| j* ¡ D ]Ç\}}t|tj+ƒs—qŠ|  ,|¡\}}}|jD ]h}t|tjƒrµtj |j|j¡}nt|tƒrÄtj |j|¡}nq¢tƒ } |  |¡}|  
dd¡ |  
dd| d ¡ |  
dd|› d¡ |  
dd|› d¡ |  
dd¡ |  
d	d¡ | 
| j||f | ¡ q¢|D ]B}tƒ } |  |¡}|  
dd¡ |  
dd| d ¡ |  
d|¡ |  
dtj | j-|¡¡ |  
dd¡ |  
d	d¡ | 
| j.| | ¡ qqŠ| j/ 0¡ D ]L}!tj 1|!¡d }"tƒ }#|  |!¡}|# 
dd¡ |# 
dd| d ¡ |# 
dd|"› d¡ |# 
dd|!› d¡ |# 
dd¡ |# 
d	d¡ | 
| j|! |#¡ qWd S )Nr%  ZPBXFileReferenceZlastKnownFileTypezwrapper.frameworkrÝ   z
.frameworkr‰   zSystem/Library/Frameworks/Ú
sourceTreeÚSDKROOTFTZexplicitFileTyper(  ZfileEncodingÚ4Z
BUILD_ROOTZSOURCE_ROOTr   r   zcompiled.mach-o.executablezdummy.dylibú"%s"rG   ZrefTypeZBUILT_PRODUCTS_DIR)2r¨   r@   r	  rB   r   r
  r  rW   r  r[   rF   rÚ   r   rž   r8  r…   r‰   rŠ   rÛ   rŸ   rR   r   rj   r9  r×   r¡   rú   r   rû   r}   rø   r˜   rA  ÚrelpathrÜ   r  Úabsolute_pathr“   rÙ   Úget_filenameÚ
ExecutableÚSharedLibraryrª   rò   ró   Zsrc_to_buildrñ   rc   r  r–   )$r-   rÎ   r¤   rÞ   r  r  r;  Zframework_filerefr   r<  r=  r>  Zsrc_dictrÖ   rÝ   r‰   rý   r#   ÚoutputsrB  r   rC  rD  Zrel_namer?  Útarget_dictrŸ   ZreftypeÚtypestrrô   rõ   rö   r@  r  r¡   Zbuildfile_dictr.   r.   r/   rÂ   Ç  s  


€






ì





÷
öz(XCodeBackend.generate_pbx_file_referencec                 C  s¢   | j  ¡ D ]I}tƒ }| |jd |d¡ | dd¡ | dd¡ tƒ }| d|¡ | ¡ D ]}t|tj	ƒrG|j
D ]}| | j| |› d¡ q8q-| dd	¡ qd S )
Nrâ   r%  ZPBXFrameworksBuildPhaseÚbuildActionMaskéÿÿÿÚfilesr5  Ú"runOnlyForDeploymentPostprocessingr   )r¨   r  rW   rF   rå   r?   r	  rB   r   r
  r  r  )r-   rÎ   rÞ   Úbt_dictZ	file_listr  r  r.   r.   r/   rÃ   a  s   
€õz/XCodeBackend.generate_pbx_frameworks_buildphasec              	   C  sŽ  i }i }| j D ]}|  ¡ ||< |  ¡ ||< q| jD ]}|  ¡ ||< |  ¡ ||< q|  ¡ }|  ¡ }|  ¡ }|  ¡ }tƒ }	| | j|	¡ |	 dd¡ tƒ }
|	 d|
¡ |
 |d¡ |
 |d¡ |
 |d¡ |
 |d¡ |	 dd	¡ |  ||¡ tƒ }| ||d¡ | dd¡ tƒ }| d|¡ | d
d¡ | dd	¡ tƒ }| ||d¡ | dd¡ tƒ }| d|¡ | j  ¡ D ]}| 	¡ D ]}t
|tjƒrÕ|jD ]}| | j| |¡ qÉq¾q¸| d
d¡ | dd	¡ | j ¡ D ]§\}}tƒ }| || ||¡ | dd¡ tƒ }| d|¡ | || d¡ |jr#| d
d|j› d|j› d¡ n| d
d|j› d¡ | dd	¡ tƒ }| || |d¡ | dd¡ tƒ }| d|¡ |jD ]0}t
|tjƒretj |j|j¡}nt
|tƒrttj |j|¡}nqR| | j||f |¡ qR| d
d¡ | dd	¡ qètƒ }| ||d¡ | dd¡ tƒ }| d|¡ | j D ]}| | j| |¡ q¬| d
d¡ | dd	¡ d S )Nr%  ÚPBXGroupÚchildrenzProject treerã   ZProductsrâ   rI  ú	"<group>"rÝ   zSource filesr(  u    â€¢ ú"Source files")r¨   ro   rª   rW   rF   rq   r?   Úadd_projecttreer  r	  rB   r   r
  r  r  r@   Ú
subprojectrÝ   rÚ   r   rž   r…   r‰   rŠ   rÛ   rŸ   rR   r   rÙ   )r-   rÎ   ZgroupmapZtarget_src_maprÞ   Úprojecttree_idZresources_idZproducts_idZframeworks_idZ	main_dictZmain_childrenZresource_dictZresource_childrenZframeworks_dictZframeworks_childrenr  r  r¤   rS  Útarget_childrenÚsource_files_dictZsource_file_childrenr   Zproduct_dictZproduct_childrenr.   r.   r/   rÄ   o  sœ   


€ý 

zXCodeBackend.generate_pbx_groupc           
      C  sD  |  ¡ }|  ¡ }tƒ }| |||¡ | dd¡ tƒ }| d|¡ | dd|› d¡ | dd¡ tƒ }|jD ],}t|tjƒrIt	j
 |j|j¡}nt|tƒrWt	j
 |j|¡}nq7| | j||f |¡ q7|jD ],}	t|	tjƒrpqgt|	tjƒr€t	j
 |	j|	j¡}	nt	j
 |j|	¡}	| | j||	f |	¡ qg| dd	¡ | dd¡ |S )
Nr%  rZ  r[  rÝ   r(  u    Â· target"rI  r\  r]  )r   ro   rW   rF   r?   rÚ   rB   r   rž   r…   r‰   rŠ   rÛ   rŸ   rR   r   rÜ   r   r  )
r-   rÎ   rÞ   ÚtidÚgroup_idrS  ra  rb  r   r   r.   r.   r/   Úwrite_group_target_entryÈ  s6   


z%XCodeBackend.write_group_target_entryc                 C  sf   t ƒ }| ||d¡ | dd¡ tƒ }| d|¡ | dd¡ | dd¡ |  ¡ }|  |||d	¡ d S )
NzRoot of project treer%  rZ  r[  rÝ   z"Project root"rI  r\  r8   )rW   rF   r?   Úgenerate_project_treeÚ
write_tree)r-   rÎ   r`  Z	root_dictra  Zproject_treer.   r.   r/   r^  è  s   zXCodeBackend.add_projecttreec              
   C  s  |j  ¡ D ]B\}}tƒ }tƒ }|  ¡ }	| |	|¡ | |	¡ | dd¡ | d|¡ | dd|› d¡ | dd¡ |  |||tj 	||¡¡ q|j
D ]}
|  ||
¡}| |¡ qKtj 	|d¡tj 	|d	¡tj 	|d
¡g}|D ]}| j |d ¡}|r| |¡ qod S )Nr%  rZ  r[  rÝ   r(  rI  r\  zmeson.buildzmeson.optionszmeson_options.txt)r*   r@   rW   r?   ro   rF   rg  r…   r‰   rŠ   r+   re  r   rÓ   )r-   rÎ   Z	tree_nodeZchildren_arrayZcurrent_subdirZsubdir_nameZsubdir_nodeZsubdir_dictZsubdir_childrenZ	subdir_idr   rd  Z
potentialsZbfrM   r.   r.   r/   rg  ô  s0   

þ
€ýzXCodeBackend.write_treec                 C  s*   t ƒ }| j ¡ D ]
\}}|  ||¡ q|S r)   )r(   r¨   r@   Úadd_target_to_tree)r-   Z	tree_infor¤   rÞ   r.   r.   r/   rf    s   z"XCodeBackend.generate_project_treec                 C  sP   |}|j  d¡}|D ]}|sq
||jvrtƒ |j|< |j| }q
|j |¡ d S )Nr›   )rÛ   r–   r*   r(   r+   rD   )r-   Z	tree_rootrÞ   Zcurrent_nodeZpath_segmentsr   r.   r.   r/   rh    s   
zXCodeBackend.add_target_to_treec              	   C  s¾  | j  ¡ D ]V\}}tƒ }| j| }| |||¡ | dd¡ | d| j| d|› d¡ tƒ }| d|¡ d}|jD ]}t|t	j
ƒrX| | j||f d|› d	|› ¡ |d
7 }q;|j ¡ D ]\}	}
| |
|	› d¡ q^| dtƒ ¡ tƒ }| d|¡ | | j¡ | j| jD ]7}t|t	jƒr| | j| ¡  |j¡ qˆt|t	jƒr²| | j|j ¡  |jj¡ qˆ| j| ¡  }| |d¡ qˆ|jD ]}t|t	jƒrÛ|j ¡ }| j| }| |d¡ qÃd}|jD ].}t|t	jƒrö| | j| ¡  |j¡ nt|t	jƒr| | j|j ¡  |jj¡ |d
7 }qá| dd|› d¡ | dd|› d¡ | d| j| |¡ t|t	jƒr8d}nt|t	jƒrBd}nt|t	jƒrLd}ntd| ƒ‚| dd|› d¡ qd S )Nr%  ZPBXNativeTargetr&  ú.Build configuration list for PBXNativeTarget "r(  r)  r   z
Generator r›   r   z yyyZ
buildRulesr   r+  rÝ   r,  ZproductReferencezcom.apple.product-type.toolz%com.apple.product-type.library.staticz&com.apple.product-type.library.dynamiczUnknown target type for %sZproductType)rí   r@   rW   r¨   rF   rê   r?   rú   rB   r   rû   rï   rå   r{   r  rò   r  r   rÝ   r  r   r  rÜ   r  rÙ   rP  ÚStaticLibraryrQ  r
   )r-   rÎ   r¤   r=  Zntarget_dictrÞ   Zbuildphases_arrayrý   r#   ZbpnameZbpvalZ	dep_arrayÚltr   Zsource_target_idrT  r.   r.   r/   rÅ     sh   

"€


€

Åz'XCodeBackend.generate_pbx_native_targetc           	      C  sd  t ƒ }| | j|d¡ | dd¡ t ƒ }| d|¡ | dd¡ | d| jd| jj› d	¡ | d
t ƒ ¡ tƒ }| d|¡ | j ¡ D ]
\}}| ||¡ qC| dd¡ | dd¡ | d| j	¡ | dd	| j
 ¡  d	 ¡ | dd¡ tƒ }| d|¡ | | jd¡ | | jd¡ | | jd¡ | jD ]}| | j| |¡ q•| jD ]}| | j| |¡ q¤d S )NrH  r%  Z
PBXProjectZ
attributesZ!BuildIndependentTargetsInParallelr$   r&  ú)Build configuration list for PBXProject "r(  rE  ZbuildStylesZcompatibilityVersionz"Xcode 3.2"ZhasScannedForEncodingsr   Z	mainGroupZprojectDirPathZprojectRootú""r+   r  r   r!  )rW   rF   rm   rp   r   rœ   r?   rà   r@   rq   rj   r9  rr   ru   rx   r¨   rí   rª   r-  )	r-   rÎ   Zproject_dictÚ	attr_dictZ	style_arrrÝ   r=  Ztargets_arrrÞ   r.   r.   r/   rÆ   Z  s6   

ÿz!XCodeBackend.generate_pbx_projectc                 C  s,   |   |¡ |  |¡ |  |¡ |  |¡ d S r)   )Úgenerate_test_shell_build_phaseÚ generate_regen_shell_build_phaseÚ)generate_custom_target_shell_build_phasesÚ,generate_generator_target_shell_build_phasesrÍ   r.   r.   r/   rÇ   v  s   


z+XCodeBackend.generate_pbx_shell_build_phasec                 C  sÂ   t ƒ }| | j|d¡ | dd¡ | dd¡ | dtƒ ¡ | dtƒ ¡ | dtƒ ¡ | d	d
¡ | dd¡ t ¡ ddd| j ¡ g }d dd„ |D ƒ¡}| dd|› d¡ | dd
¡ d S )Nr*  r%  ÚPBXShellScriptBuildPhaserU  rV  rW  Ú
inputPathsÚoutputPathsrX  r   Ú	shellPathú/bin/shÚtestz--no-rebuildz-CrG   c                 S  ó   g | ]}d | ‘qS ©ú'%s'r.   ©r  rM   r.   r.   r/   r  ‡  ó    z@XCodeBackend.generate_test_shell_build_phase.<locals>.<listcomp>ÚshellScriptr(  ÚshowEnvVarsInLog)	rW   rF   rv   r?   r   Úget_meson_commandrj   r“   rŠ   ©r-   rÎ   Z
shell_dictrö   Úcmdstrr.   r.   r/   ro  |  s   z,XCodeBackend.generate_test_shell_build_phasec                 C  sÊ   t ƒ }| | j|d¡ | dd¡ | dd¡ | dtƒ ¡ | dtƒ ¡ | dtƒ ¡ | d	d
¡ | dd¡ t ¡ ddtj | j	 
¡ d¡g }d dd„ |D ƒ¡}| dd|› d¡ | dd
¡ d S )Nr*  r%  rs  rU  rV  rW  rt  ru  rX  r   rv  rw  z
--internalZ
regencheckzmeson-privaterG   c                 S  ry  rz  r.   r|  r.   r.   r/   r  –  r}  zAXCodeBackend.generate_regen_shell_build_phase.<locals>.<listcomp>r~  r(  r  )rW   rF   ry   r?   r   r€  r…   r‰   rŠ   rj   r“   r  r.   r.   r/   rp  ‹  s   "z-XCodeBackend.generate_regen_shell_build_phasec              	   C  s¢  | j  ¡ D ]É\}}t|tjƒsq| j|dd\}}}| j|d |dd … |jr+|d nd |jr3|d nd |j	d\}}t
ƒ }	| | j| |	d|› d¡ |	 dd	¡ |	 d
d¡ |	 dtƒ ¡ |	 dtƒ ¡ tƒ }
|	 dd |d ¡¡ |	 d|
¡ |D ]}|
 tj | j ¡ |¡¡ q||	 dd¡ |	 dd¡ | j ¡ }g }|D ]}| | dtdƒd ¡¡ q¡d dd„ |D ƒ¡}|	 dd|› d|› d¡ |	 dd¡ qd S )NT)Zabsolute_outputsr   r   )ÚcaptureÚfeedÚenvz/* Custom target rP   r%  rs  rU  rV  rW  rt  rÝ   z"Generate {}."ru  rX  rv  rw  r(  é\   rG   c                 S  s   g | ]}d |› d ‘qS )z\'r.   )r  Úxr.   r.   r/   r  ¶  s    zJXCodeBackend.generate_custom_target_shell_build_phases.<locals>.<listcomp>r~  z"cd z; r  )rª   r@   rB   r   rò   ró   Zas_meson_exe_cmdlinerƒ  r„  r…  rW   rF   rï   r?   Úformatr…   r‰   rŠ   rj   r“   rD   rl   Úchr)r-   rÎ   r¤   rÞ   rô   rõ   rö   Z	fixed_cmdÚ_r@  Úoutarrayr   ÚworkdirZ
quoted_cmdr   r‚  r.   r.   r/   rq  š  s>   


ü
äz6XCodeBackend.generate_custom_target_shell_build_phasesc              	   C  s˜   | j  ¡ D ]\}}d}|jD ]}t|tjƒr#|  |||||¡ |d7 }qq| j ¡ D ]\}}d}|jD ]}t|tjƒrH|  |||||¡ |d7 }q3q*d S r÷   )	r¨   r@   rú   rB   r   rû   Úgenerate_single_generator_phaserª   rÚ   )r-   rÎ   r¤   rÞ   rý   rþ   r.   r.   r/   rr  º  s"   
€ý
€ýþz9XCodeBackend.generate_generator_target_shell_build_phasesc              
   C  s|  |  ¡ }| ¡ }|  |¡}| j ¡ }	tƒ }
| | j||f |
d|› d|› d¡ | ¡ }| 	¡ }|
 dd¡ |
 dd¡ |
 dt
ƒ ¡ |
 d	t
ƒ ¡ |
 d
d|› d|› d¡ d|	gg}||f}| j| }t
ƒ }|
 d|¡ |D ]}| |¡ qp|D ]t}| | j¡}| |¡}| |¡D ]a}tj |  |¡|¡}g }|D ]'}| d|¡}| d|¡ d|  |¡¡}| dtj | j|j¡¡}| |¡ qœ|  ||  |¡|¡}|  ||¡}|jrädg| | d|dg }n|| }| |¡ qŒqz|
 dd¡ |
 dd¡ g }|D ]'}g }|D ]}d|v r| d|› d¡ q| |¡ q| d |¡¡ qÿdd |¡ d }|
 d|¡ |
 dd¡ d S )Nz"Generator r›   r(  r%  rs  rU  rV  rW  rt  rÝ   Úcdru  z@INPUT@z@OUTPUT@z@BUILD_DIR@z@CURRENT_SOURCE_DIR@ú(ú>ú)rX  r   rv  rw  rG   ú\"z && r~  r  )Zget_generatorZget_exeZbuild_target_to_cmd_arrayrj   r“   rW   rF   rï   rÿ   Úget_outputsr?   r}   Zrel_to_builddirZbuild_to_srcZget_arglistr   r…   r‰   rŠ   r  rl   rÛ   rD   Zreplace_outputsZreplace_extra_argsrƒ  )r-   r¤   rÞ   rþ   rý   rÎ   Ú	generatorÚexeZexe_arrrŒ  Zgen_dictZ
infilelistZoutfilelistÚcommandsr  r  r‹  ZofrM   Z
infilenameZ	base_argsr  r   ÚargsÚargZfull_commandZquoted_cmdsZcmndÚqr   r‚  r.   r.   r/   r  È  sf   

&


ñ
z,XCodeBackend.generate_single_generator_phasec              
   C  sž  | j D ]É}tƒ }| j| }| |j| |d¡ | dd¡ | dd¡ tƒ }| d|¡ | j| jD ]$}tj 	|j
|j¡}| j |¡sV| | j||f tj 	| j ¡ |¡¡ q2d}|jD ]i}t|tjƒrƒ|  |¡\}	}
}|
D ]}| | j| tj 	| j ¡ |¡¡ qnq\t|tjƒr¢| ¡ D ]}| | j| tj 	| j ¡ |¡¡ qq\t|tjƒr¾| j||f }|d7 }|D ]}| |¡ qµq\td	t|ƒ ƒ‚| d
d¡ qd S )Nrä   r%  ZPBXSourcesBuildPhaserU  rV  rW  r   r   zUnknown input type: rX  )r  rW   r¨   rF   rå   r?   rÚ   r…   r‰   rŠ   rÛ   rŸ   rj   Z	is_headerr~   r9  rú   rB   r   rò   ró   rð   r“   r  r“  rû   rù   r`   rR   )r-   rÎ   rÝ   Z
phase_dictrÞ   Zfile_arrr   rý   Úgtrô   rõ   rö   r   Zgenfilesr.   r.   r/   rÈ     sJ   

&€
ÿÿÿÿÿâz-XCodeBackend.generate_pbx_sources_build_phasec                 C  s$  t ƒ }| | j|d¡ | dd¡ | d| j¡ g }| | j| jdd f¡ | jD ]}| j| }| || j	| || j
| f¡ q(| jD ]}| j| }| || j| |d f¡ qBt|t d¡d}|D ].}t ƒ }| |d |d¡ | dd¡ | d|d |d	 ¡ |d
 d ur| d|d
 d¡ qad S )Nr  r%  r+  r   ZREGENr   r"  r   r   r#  ZtargetProxyrG  )rW   rF   r.  rr   rD   r{   rx   r¨   r  rí   r  rª   r  r-  r0  r1  r2  )r-   rÎ   Úall_dictr+   rÞ   r=  Zsorted_targetsÚt_dictr.   r.   r/   rÉ   &  s,   

 

€úz+XCodeBackend.generate_pbx_target_dependencyc                 C  sv  | j D ]K}tƒ }| | j| ||¡ | dd¡ tƒ }| d|¡ | dd¡ | dd¡ | dd	¡ | d
d¡ | dd| j ¡  ¡ | dd|› d¡ q| j D ]A}tƒ }| | j| ||¡ | dd¡ tƒ }| d|¡ | dd| j ¡  ¡ tƒ }| d¡ | d|¡ | dd|› d¡ qR| j D ]A}tƒ }| | j| ||¡ | dd¡ tƒ }| d|¡ | dd| j ¡  ¡ tƒ }| d|¡ | d¡ | dd|› d¡ q—| j	 
¡ D ]\}}|  |||¡ qÞ| j 
¡ D ]I\}}tƒ }| | j| | ||¡ | dd¡ tƒ }| d|¡ | dd¡ | dd¡ | d
d¡ | dd| j ¡  ¡ | dd|› d¡ qïd S )Nr%  ÚXCBuildConfigurationrE  ZARCHSz"$(NATIVE_ARCH_ACTUAL)"ZONLY_ACTIVE_ARCHr$   ZSWIFT_VERSIONz5.0rJ  z"macosx"ÚSYMROOTz
"%s/build"rÝ   r(  rL  ú"$(inherited)"ÚWARNING_CFLAGS)rt   rW   rF   rç   rj   r“   rè   r?   ré   r¨   r@   Úgenerate_single_build_targetrª   ræ   )r-   rÎ   rh   rY  rF  Ú
warn_arrayÚtarget_namer   r.   r.   r/   rÊ   ?  s`   




öz,XCodeBackend.generate_xc_build_configurationc                 C  sê   d}g }|j D ]i}t|tjƒrt|tjƒrqt|tjƒr'|  |j¡}| ¡ }nt|tj	ƒr7|  |¡}| ¡ }n	|  
|¡}| ¡ }tj | j ¡ ||¡}| d| ¡ t|tjƒrZd}t|tjƒrp|  ||¡\}	}
||	7 }|po|
}q||fS )NFr{  T)r  rB   r   ÚSharedModulerP  r  r”   r   rO  rò   r   r…   r‰   rŠ   rj   r“   rD   rQ  rj  Ú determine_internal_dep_link_args)r-   r   rh   Úlinks_dylibÚdep_libsÚlZrel_dirÚlibnameZabs_pathZsub_libsZsub_links_dylibr.   r.   r/   r¥  y  s.   




€z-XCodeBackend.determine_internal_dep_link_argsc           ;   	   C  sî  | j D ]p}g }d}g }|jD ]=}|jD ]$}	tj |j|	¡}
| tj | j 	¡ |
¡¡ | tj | j 
¡ |
¡¡ q|jD ]}| tj | j 
¡ |¡¡ q<q|  ||¡\}}|r]ddg| }d }t|tjƒrˆt|tjƒrng }ndg}|dg| 7 }tj | j 
¡ |j|¡}|j}n|}d}|d ur™| ¡ d | }n| ¡ }||j7 }|  |¡r°|jd g }}n|  |¡\}}t|tjƒsÓ|| j ||j|j¡7 }|| j ||j¡7 }g }| ¡ D ]}|| ¡ 7 }|| ¡ 7 }qÙ|j D ]4}t|tj!ƒrt"ƒ }|  #|¡D ]"}tj | j 
¡ |j$j|¡}||vr| %|¡ |d| d g7 }qüqëd	}|j&D ]”}t|tj'ƒrV| j(||f }|d
7 }|D ]}| )d¡sI| )d¡rR|d| d g7 }q;q%t|tj*ƒr‰|  +|¡\}}}|D ]}tj ,|¡d t-v r…|dtj | j 
¡ |¡ d g7 }qgq%t|tj.ƒr¶| /¡ D ]}tj ,|¡d t-v r²|dtj | j 
¡ |¡ d g7 }q”q%t0|ƒ‚t|tjƒrÎ| jj1j2}|| 3|¡7 }nt|tjƒrÛ|| 4¡ 7 }d |¡} | j5| | }!i }"| jj1j|j D ]¯}#|#t6vrúqñ|j 7|#¡}$|$d u rqñ|$ 8| 9t:dƒ¡¡}%| ;¡ }&|$ <|&¡}'| jj=|j  7|ji ¡ 7|#g ¡}(| jj>|j  7|#g ¡})| ?|#¡}*|%|' |( |) |* }+|#dkr\|  @|¡},|,D ]}|+|$ A|d¡7 }+qP|+rŸ|}-|$rr|jBrr|-| jC||$dd7 }-|#dkrzd}#n|#dkrd}#t6|# }.|.|"v r“|"|.  |+7  < n|+|"|.< |"|.  |-7  < qñtj | j 
¡ |j¡}/tDƒ }0| E|!|0|¡ |0 Edd¡ tDƒ }1|0 Ed|1¡ |1 Edd¡ t|tjƒrß|1 Edd¡ |1 Edd¡ n|d urî|1 Edd|› d¡ |jFrù|1 Ed|jF¡ |jGrd|jG }2|1 Ed |2¡ |1 Ed!tH| 9t:d"ƒ¡ ¡ |1 Ed#d$¡ tI| 9t:d%ƒ¡ }3|3d ur/|1 Ed&|3¡ |jJr€| Kd¡| Kd¡ | Kd¡ | Kd¡ }4d'd(„ |4D ƒ}4|4r€tL|4ƒd
kretM Nd)|4›d*|jO› d+¡ tj | P¡ |4d	 ¡}5|1 Ed,d¡ |1 Ed-d.|5› d¡ |1 Ed/d¡ |1 Ed0d$¡ tQƒ }6g }7|7 |  R|¡¡ |jBr»|7 tj | j 
¡ | P¡ ¡¡ |7 tj | j 	¡ | P¡ ¡¡ |rÏ|D ]}8tj S|8¡}8|7 |8¡ qÀ|7D ]}8|6 Ed1|8› d2¡ qÑ|1 Ed3|6¡ |1 Ed4d|› d¡ |1 Ed5d¡ t|tjƒr|1 Ed6d7¡ |1 Ed8d9¡ nt|tjƒr|1 Ed6d:¡ |  T|1|"¡ |1 Ed;d| › d¡ |1 Ed<d¡ d|v r;|1 Ed=d|› d¡ n|1 Ed=|¡ |1 Ed>d¡ |1 Ed?d|/› d¡ tQƒ }9|1 Ed@|9¡ |1 EdAd$¡ tQƒ }:|1 EdB|:¡ |: EdC¡ |0 EdD|¡ qd S )ENFz-Wl,-search_paths_firstz -Wl,-headerpad_max_install_namesz-dynamiclibr8   rÐ   r   r’  r   r   r&   r'   rÑ   rG   Zwarning_levelT)rN  r   r   r   r   r%  r  rE  ZCOMBINE_HIDPI_IMAGESr$   ZDYLIB_CURRENT_VERSIONrm  ZDYLIB_COMPATIBILITY_VERSIONr(  ZEXECUTABLE_PREFIXZEXECUTABLE_SUFFIXZGCC_GENERATE_DEBUGGING_SYMBOLSÚdebugZGCC_INLINES_ARE_PRIVATE_EXTERNr%   ÚoptimizationZGCC_OPTIMIZATION_LEVELc                 S  s.   g | ]}|  d ¡s|  d¡s|  d¡r|‘qS )z.hz.hhr   )Úendswith)r  Zpchr.   r.   r/   r  +  s   . z=XCodeBackend.generate_single_build_target.<locals>.<listcomp>zGUnsupported Xcode configuration: More than 1 precompiled header found "z". Target "z" might not compile correctly.ZGCC_PRECOMPILE_PREFIX_HEADERZGCC_PREFIX_HEADERz"$(PROJECT_DIR)/ZGCC_PREPROCESSOR_DEFINITIONSZGCC_SYMBOLS_PRIVATE_EXTERNz"\"z\""ZHEADER_SEARCH_PATHSZINSTALL_PATHZLIBRARY_SEARCH_PATHSZLIBRARY_STYLEZBUNDLEZMACH_O_TYPEZ	mh_bundleZDYNAMICZOTHER_LDFLAGSZOTHER_REZFLAGSZPRODUCT_NAMEZSECTORDER_FLAGSrž  ZSYSTEM_HEADER_SEARCH_PATHSZUSE_HEADERMAPr   rŸ  rÝ   )Urt   Úinclude_dirsÚincdirsr…   r‰   rŠ   ÚcurdirrD   rj   r9  r“   Zextra_build_dirsr¥  rB   r   rQ  r¤  rÛ   Ú	soversionr  Z	link_argsZis_swift_targetÚ	compilersZ determine_linker_and_stdlib_argsrj  Zget_project_link_argsr_  Zfor_machineZget_global_link_argsr	  Zget_compile_argsZget_link_argsrÜ   r  rX   Zdetermine_ext_objsr   rZ   rú   rû   r}   r¬  rò   ró   r    ÚLINKABLE_EXTENSIONSr  r“  r`   rk   ÚoptionsZget_std_shared_module_link_argsZget_std_shared_lib_link_argsræ   ÚLANGNAMEMAPrÓ   Zget_warn_argsrn   r   Zget_optionsZget_option_compile_argsZprojects_argsZglobal_argsZget_extra_argsZdetermine_swift_dep_dirsZget_include_argsZimplicit_include_directoriesZ"get_custom_target_dir_include_argsrW   rF   ÚprefixÚsuffixÚBOOL2XCODEBOOLÚOPT2XCODEOPTZhas_pchZget_pchr˜   r	   ÚwarningrÝ   r‹   r?   Zget_target_private_dir_absr•   Úadd_otherargs);r-   rÎ   r£  r   rh   r§  r¦  Z
headerdirsr3  ÚsdrŽ  ÚextraZdylib_versionZldargsZinstall_pathZproduct_nameZlinkerZstdlib_argsZcargsr  r   Z
added_objsZobjname_relZobjname_absrý   rR  Zo_absrô   rõ   rö   Zofnamer³  ZldstrÚvalidÚlangargsÚlangÚcompilerZ	warn_argsZ
copt_proxyZstd_argsZpargsZgargsZtargsr—  Zswift_dep_dirsZ
lang_cargsÚlangnameZsymrootrY  rF  r¶  Zopt_flagZpchsZrelative_pch_pathZ
header_arrZunquoted_headersrM   Zsysheader_arrr¢  r.   r.   r/   r¡  ’  sj  


ÿ




€
€þ"€þ"€þ




 





€


(

 ¸z)XCodeBackend.generate_single_build_targetc                 C  s”   |  ¡ D ]C\}}|rGg }|D ]'}| tdƒdtdƒ ¡}| dd¡}d|v s*d|v r0d| d }| |¡ q| d|› d	dd |¡ d ¡ qd S )
Nr†  é   r(  z\\\"rG   ú'r’  ZOTHER_ÚFLAGS)r@   rl   r‰  rD   rF   rŠ   )r-   rF  r¾  rÁ  r—  Zquoted_argsr   r.   r.   r/   rº  \  s   "€ôzXCodeBackend.add_otherargsc                 C  sÒ  t ƒ }| | j|d| jj› d¡ | dd¡ tƒ }| d|¡ | jD ]}| | j| |¡ q#| dd¡ | d| j¡ t ƒ }| | j	|d	¡ | dd¡ tƒ }| d|¡ | jD ]}| | j
| |¡ qY| dd¡ | d| j¡ t ƒ }| | j|d
¡ | dd¡ tƒ }| d|¡ | jD ]}| | j| |¡ q| dd¡ | d| j¡ t ƒ }| | j|d¡ | dd¡ tƒ }| d|¡ | jD ]}| | j| |¡ qÅ| dd¡ | d| j¡ | jD ]@}	t ƒ }
| j|	 }| ||
d|	› d¡ |
 dd¡ tƒ }|
 d|¡ | j|	 | j }| || j¡ |
 dd¡ |
 d| j¡ qá| jD ]A}	t ƒ }
| j|	 }| ||
d|	› d¡ |
 dd¡ tƒ }|
 d|¡ | j|	 | j }| || j¡ |
 dd¡ |
 d| j¡ q%d S )Nrl  r(  r%  ZXCConfigurationListZbuildConfigurationsZdefaultConfigurationIsVisibler   ZdefaultConfigurationNamez;Build configuration list for PBXAggregateTarget "ALL_BUILD"z:Build configuration list for PBXAggregateTarget "RUN_TEST"z<Build configuration list for PBXAggregateTarget "REGENERATE"ri  r'  )rW   rF   rp   r   rœ   r?   rt   rç   rh   rs   rè   rw   ré   rz   r¨   rê   ræ   rª   )r-   rÎ   Z	conf_dictZ	confs_arrrh   r›  Zconf_arrZ	test_dictZ
regen_dictr£  rœ  Zlistidr=  r.   r.   r/   rË   k  sv   







öz*XCodeBackend.generate_xc_configurationListc                 C  s<   |  dd¡ |  dtƒ ¡ |  dd¡ tƒ }|  d|¡ |S )NZarchiveVersionr   ÚclassesZobjectVersionZ46rÜ   )rF   rW   )r-   ÚpbxdictrÎ   r.   r.   r/   r½   °  s   zXCodeBackend.generate_prefixc                 C  s   |  d| jd¡ d S )NZ
rootObjectrH  )rF   rm   )r-   rÆ  r.   r.   r/   rÌ   ¹  rá   zXCodeBackend.generate_suffix)r   rb   rc   rd   )@r3   r4   r5   rÝ   r0   r†   ro   r   r”   r™   r§   rÏ   r×   r«   r¬   r­   r®   r°   r±   r²   r¯   r³   rµ   r¶   rü   r´   r¸   r¹   rº   r»   r  r¼   r·   r¾   r¿   r:  rÀ   rÁ   rÂ   rÃ   rÄ   re  r^  rg  rf  rh  rÅ   rÆ   rÇ   ro  rp  rq  rr  r  rÈ   rÉ   rÊ   r¥  r¡  rº  rË   r½   rÌ   Ú__classcell__r.   r.   r€   r/   ra   Á   s~    I	
	
;O

 Y > =!: KE	ra   )!Ú
__future__r   r‡   r…   r1  ÚtypingÚTr8   r   r   r   r   r	   r
   r   ÚTYPE_CHECKINGrc   r   rI   rÒ   r´  r¸  r·  r²  r(   r7   r?   rC   rQ   rU   rW   ZBackendra   r.   r.   r.   r/   Ú<module>   sŽ   ÿþýüûúùø	÷
öõôóòñðïüú
	?