
    eQ                      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mZmZ ej                  rd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.d/Zdd0d0d1d2d3d'd4Zd5d6d7Zh d8Z G d9 d:      Z G d; d<      Z G d= d>      Z G d? d@      Z G dA dB      Z G dC dD      Z G dE dFej<                        Zy)G    )annotationsN   )backends   )build)mesonlib)mlog)MesonBugException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.hhxxhhzsourcecode.cpp.hhincswiftzsourcecode.swiftdylibzcompiled.mach-o.dylibozcompiled.mach-o.objfileszsourcecode.asmasmC	CPLUSPLUSOBJCOBJCPLUSPLUSSWIFT_)r   r   objcobjcppr   0123)plainr'   gr(   r)   r*   r   YESNO)TF>   .a.so.dylib.o.objc                      e Zd ZddZy)FileTreeEntryc                     i | _         g | _        y N)subdirstargetsselfs    A/usr/lib/python3/dist-packages/mesonbuild/backend/xcodebackend.py__init__zFileTreeEntry.__init__C   s        NreturnNone__name__
__module____qualname__r=    r>   r<   r5   r5   A   s    r>   r5   c                  &    e Zd ZddZdddZddZy)	PbxArrayc                    g | _         y r7   )itemsr:   s    r<   r=   zPbxArray.__init__H   s	    
r>   c                    t        |t              r| j                  j                  |       y | j                  j                  t        ||             y r7   )
isinstancePbxArrayItemrJ   append)r;   itemcomments      r<   add_itemzPbxArray.add_itemK   s7    dL)JJd#JJl49:r>   c                f   |j                  d       |dz  }| j                  D ]l  }|j                  r6|j                  |t        z  |j                   d|j                   dz          E|j                  |t        z  |j                   dz          n |dz  }|j                  |t        z  dz          y )Nz(
r    z,
z);
)writerJ   rP   INDENTvaluer;   ofileindent_levelis       r<   rT   zPbxArray.writeQ   s    E 	CAyyL/QWWIQqyyk2MMNL/QWWIS/AB		C
 	L'&01r>   Nr?    )rO   zT.Union[PbxArrayItem, str]rP   strr@   rA   rX   zT.TextIOrY   intr@   rA   )rC   rD   rE   r=   rQ   rT   rF   r>   r<   rH   rH   G   s    ;	2r>   rH   c                      e Zd ZdddZy)rM   c                T    || _         |rd|v r|| _        y d| d| _        y || _        y Nz/*/*  */)rV   rP   )r;   rV   rP   s      r<   r=   zPbxArrayItem.__init__]   s1    
w&!$WIS1"DLr>   Nr[   )rV   r]   rP   r]   rB   rF   r>   r<   rM   rM   \   s    #r>   rM   c                      e Zd ZddZddZy)
PbxCommentc                J    t        |t              sJ d|vsJ d| d| _        y rb   )rL   r]   text)r;   rh   s     r<   r=   zPbxComment.__init__h   s/    $$$$4$sO	r>   c                B    |j                  d| j                   d       y )N
)rT   rh   )r;   rX   rY   s      r<   rT   zPbxComment.writem   s    b2&'r>   N)rh   r]   r^   )rC   rD   rE   r=   rT   rF   r>   r<   rf   rf   g   s    $
(r>   rf   c                      e Zd ZdddZy)PbxDictItemc                b    || _         || _        |rd|v r|| _        y d| d| _        y || _        y rb   )keyrV   rP   )r;   rn   rV   rP   s       r<   r=   zPbxDictItem.__init__q   s8    
w&!$WIS1"DLr>   Nr[   )rn   r]   rV   $T.Union[PbxArray, PbxDict, str, int]rP   r]   rB   rF   r>   r<   rl   rl   p   s    	#r>   rl   c                  4    e Zd ZddZdd	dZd Zd
dZddZy)PbxDictc                0    t               | _        g | _        y r7   )setkeysrJ   r:   s    r<   r=   zPbxDict.__init__}   s     E	
r>   c                    || j                   vsJ t        |||      }| j                   j                  |       | j                  j	                  |       y r7   )rt   rl   addrJ   rN   )r;   rn   rV   rP   rO   s        r<   rQ   zPbxDict.add_item   sD    $))###3w/		c

$r>   c                    || j                   v S r7   )rt   )r;   rn   s     r<   has_itemzPbxDict.has_item   s    diir>   c                ^    t        |t              sJ | j                  j                  |       y r7   )rL   rf   rJ   rN   )r;   rP   s     r<   add_commentzPbxDict.add_comment   s$    ':...

'"r>   c           
        |j                  d       |dz  }| j                  D ]t  }t        |t              r|j                  ||       't        |t              r)t        |j
                  t        t        f      r|j                  rC|j                  |t        z  |j                   d|j
                   d|j                   dz          |j                  |t        z  |j                   d|j
                   dz          t        |j
                  t              r|j                  r6|j                  |t        z  |j                   d|j                   dz          n(|j                  |t        z  |j                   dz          |j
                  j                  ||       t        |j
                  t              r|j                  r6|j                  |t        z  |j                   d|j                   dz          n(|j                  |t        z  |j                   dz          |j
                  j                  ||       !t        |       t        |j                         t        |j
                         t        d      t        |       t        d       |dz  }|j                  |t        z  dz          |d	k(  r|j                  d
       y |j                  d       y )Nz{
r   z = rS   z;
zmissing codezmissing code2}r   rj   )rT   rJ   rL   rf   rl   rV   r]   r_   rP   rU   rn   rq   rH   printRuntimeErrorrW   s       r<   rT   zPbxDict.write   s+   E 	4A!Z(|,A{+aggSz2yyL$7QUUG3qwwiqQRQZQZP[[^:_$_`L$7QUUG3qwwis:S$ST1yyL$7QUUG1QYYKs:S$STL$7QUUG3-$GHGGMM%62yyL$7QUUG1QYYKs:S$STL$7QUUG3-$GHGGMM%6!H!%%L!''N&~66a"?339	4< 	L'#-.1KKKKr>   Nr?   r[   )rn   r]   rV   ro   rP   r]   r@   rA   )rP   rf   r@   rA   r^   )rC   rD   rE   r=   rQ   rx   rz   rT   rF   r>   r<   rq   rq   |   s      #&r>   rq   c                      e Zd ZdZd= fdZd Zd>dZd Zd Zd Z	d Z
d?d@d	Zd
 ZdAdZdAdZdAdZdAdZdAdZdAdZdAdZdAdZdAdZdAdZdAdZd ZdAdZdAdZdAdZdAdZdAdZd ZdAdZdAdZ d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z'd& Z(d' Z)d( Z*d) Z+d* Z,d+ Z-d, Z.d- Z/d. Z0d/ Z1d0 Z2d1 Z3d2 Z4d3 Z5d4 Z6d5 Z7d6 Z8d7 Z9d8 Z:d9 Z;dBd:Z<dCd;Z=dDd<Z> xZ?S )EXCodeBackendxcodec                d   t         |   ||       | j                  j                  j                  d   j                  dd      d d | _        t        j                  d| j                  j                  j                  t        d                  | _        | j                         | _        | j                         | _        | j                         | _        | j                         | _        | j                  g| _        | j                         | _        | j                         | _        | j                         | _        | j                         | _        | j                         | _        | j                         | _        | j                         | _        t3               | _        i | _        i | _        i | _        y )Ndefault-r\      r]   	buildtype)superr=   environmentcoredata
lang_guidsreplaceproject_uidTcast
get_optionr   r   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_idrq   top_level_dictgenerator_outputsbuildfile_idsfileref_ids)r;   r   interpreter	__class__s      r<   r=   zXCodeBackend.__init__   sC   ,++44??	JRRSVXZ[\_]_`t'7'7'@'@'K'KIVaLb'cd $ KKMkkm $>>*{{}#{{}!% $"&++-#';;= %i!#   r>   c                    |dz   }t        |dd      5 }|j                  d       |j                  |d       d d d        t        j                  ||       y # 1 sw Y    xY w)Nz.tmpwzutf-8)encodingz// !$*UTF8*$!
r   )openrT   osr   )r;   r   	ofilenametmpnamerX   s        r<   write_pbxfilezXCodeBackend.write_pbxfile   s\    f$'31 	+UKK)*  *	+ 	

7I&	+ 	+s   $AA c                ~    t        t        j                               j                         j	                  dd      d d S )Nr   r\   r   )r]   uuiduuid4upperr   r:   s    r<   r   zXCodeBackend.gen_id   s0    4::< &&(00b9#2>>r>   c                    t         j                  j                  |j                         t	        j
                  d| j                  j                  j                  t        d                        }|S )Nr]   r   )
r   pathjoin
get_subdirr   r   r   r   r   r   r;   targetdirnames      r<   get_target_dirzXCodeBackend.get_target_dir   sP    '',,v002AFF5$BRBRB[B[BfBfgpq|g}B~4  Ar>   c                    |j                         }t        j                  t        j                  j	                  | j
                  j                         |      d       |S )NTexist_ok)r   r   makedirsr   r   r   get_build_dirr   s      r<   get_custom_target_output_dirz)XCodeBackend.get_custom_target_output_dir   sB    ##%
BGGLL!1!1!?!?!A7KVZ[r>   c                   | j                  |      dk(  ryt        j                  j                  | j                  |            j	                  t        j
                        }t        j
                  j                  dgt        |      z        S )Nr\   z..)r   r   r   normpathsplitsepr   len)r;   r   directoriess      r<   target_to_build_rootz!XCodeBackend.target_to_build_root   se    v&",gg&&t':':6'BCII"&&Qvv{{D6C$4455r>   c           
     Z   | j                   j                  }| j                  }|j                         }d}t	        |t
        j                        r|j                  }t        j                  j                  t        j                  j                  |            d   }| d| d| d| d| d
}|S )Nx86_64r   z.build//z.build/Objects-normal/r2   )r   project_namer   get_idrL   r   Filefnamer   r   splitextbasename)	r;   r   sourceprojectr   tnamearchstemobj_paths	            r<   object_filename_from_sourcez(XCodeBackend.object_filename_from_source   s     **))NN	fhmm,\\Fww 0 0 89!<Ygi[%8NtfTUVZU[[]^r>   c                   |rt        d      |rt        d      | j                          | j                  j                         | _        | j                  j                         | _        | j                          | j                          | j                          | j                          | j                          | j                          | j                          | j                          | j                          | j!                          | j#                          | j%                          | j'                          | j)                          | j+                          | j-                          | j/                          | j1                          t2        j4                  j7                  | j8                  j;                         | j                  j<                  dz         | _        t3        j@                  | j>                  d       t2        j4                  j7                  | j>                  d      | _!        | jE                  | jF                        }|jI                  tK        d             | jM                  |       |jI                  tK        d             |jI                  tK        d	             | jO                  |       |jI                  tK        d
             |jI                  tK        d             | jQ                  |       |jI                  tK        d             |jI                  tK        d             | jS                  |       |jI                  tK        d             |jI                  tK        d             | jU                  |       |jI                  tK        d             |jI                  tK        d             | jW                  |       |jI                  tK        d             |jI                  tK        d             | jY                  |       |jI                  tK        d             |jI                  tK        d             | j[                  |       |jI                  tK        d             |jI                  tK        d             | j]                  |       |jI                  tK        d             |jI                  tK        d             | j_                  |       |jI                  tK        d             |jI                  tK        d             | ja                  |       |jI                  tK        d             |jI                  tK        d             | jc                  |       |jI                  tK        d             |jI                  tK        d             | je                  |       |jI                  tK        d              |jI                  tK        d!             | jg                  |       |jI                  tK        d"             | ji                  | jF                         | jk                  | jF                  | jB                         | jm                          y )#NzDWe do not expect the xcode backend to generate with 'capture = True'zCWe do not expect the xcode backend to be given a valid 'vslite_ctx'z
.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)7r
   serialize_testsr   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   r   r   r   proj_dirr   	proj_filegenerate_prefixr   rz   rf   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   generate_regen_info)r;   capture
vslite_ctxobjects_dicts       r<   generatezXCodeBackend.generate   s   #$lmm#$kll!ZZ99;"jj;;=##%%%'--/113002113--/'')++-'')**,&&(++-  "((*&&(%%'T%5%5%C%C%EtzzG^G^amGmn
DMMD1dmm5FG++D,?,?@  ,N!OP**<8  ,L!MN  ,H!IJ$$\2  ,F!GH  ,I!JK%%l3  ,G!HI  ,Q!RS..|<  ,O!PQ  ,L!MN((6  ,J!KL  ,S!TU//=  ,Q!RS  ,D!EF-  ,B!CD  ,K!LM''5  ,I!JK  ,F!GH!!,/  ,D!EF  ,T!UV++L9  ,R!ST  ,P!QR--l;  ,N!OP  ,O!PQ++L9  ,M!NO  ,P!QR,,\:  ,N!OP  ,O!PQ**<8  ,M!NOT0014..?  "r>   c                    |j                  d      d   }|dk(  rd}t        j                  |j                               }|sd}|S )N.r    r   zsourcecode.unknown)r   XCODETYPEMAPgetlower)r;   r   	extension	xcodetypes       r<   get_xcodetypezXCodeBackend.get_xcodetypeN  sG    KK$R(	I $$Y__%67	,Ir>   c                n   i | _         i | _        | j                  j                         D ]	  \  }}|j                  D ]n  }t        |t        j                        st        j                  j                  |j                  |j                        }| j                         | j                   |<   p |j                  D ]Z  }t        |t              st        j                  j                  |j                  |      }| j                         | j                   |<   \ | j                         | j                  |<    y r7   )filemaptarget_filemapr   rJ   sourcesrL   r   r   r   r   r   subdirr   r   objectsr]   )r;   nametr   r   s        r<   r   zXCodeBackend.generate_filemapW  s     ))//1 		6GD!YY 4a/QXXqww7A&*kkmDLLO4 YY 4a%QXXq1A&*kkmDLLO4 )-D%		6r>   c                F    | j                   | j                         i| _        y r7   )r   r   buildstylemapr:   s    r<   r   z#XCodeBackend.generate_buildstylemape  s    "nndkkm<r>   c                >   | j                   j                         D ]  \  }}i |_        | j                         |j                  |<   | j                         |j                  d<   | j                         |j                  d<   | j                         |j                  d<    y )N
Frameworks	ResourcesSources)r   rJ   buildphasemapr   )r;   r   r  s      r<   r   z%XCodeBackend.generate_build_phase_maph  s{    **002 	7HE1 AO%)[[]AOOE",0KKMAOOL)+/;;=AOOK()-AOOI&	7r>   c                   i | _         | j                  D ]-  }| j                  | j                         i}|| j                   |<   / | j                  D ]-  }| j                  | j                         i}|| j                   |<   / y r7   )buildconfmapr   r   r   r   )r;   r  bconfss      r<   r   z-XCodeBackend.generate_build_configuration_mapr  s~    ## 	*Anndkkm4F#)Da 	* $$ 	*Anndkkm4F#)Da 	*r>   c                F    | j                   | j                         i| _        y r7   )r   r   project_configurationsr:   s    r<   r   z0XCodeBackend.generate_project_configurations_map{  s    '+~~t{{}&E#r>   c                F    | j                   | j                         i| _        y r7   )r   r   buildall_configurationsr:   s    r<   r   z1XCodeBackend.generate_buildall_configurations_map~  s    (,'F$r>   c                F    | j                   | j                         i| _        y r7   )r   r   test_configurationsr:   s    r<   r   z-XCodeBackend.generate_test_configurations_map  s    $(NNDKKM#B r>   c                    i | _         | j                  D ]  }| j                         | j                   |<   ! | j                  D ]  }| j                         | j                   |<   ! y r7   )buildconflistmapr   r   r   r;   r  s     r<   r   z1XCodeBackend.generate_build_configurationlist_map  s`     "## 	5A'+{{}D!!!$	5$$ 	5A'+{{}D!!!$	5r>   c                n    i | _         | j                  D ]  }| j                         | j                   |<   ! y r7   )native_targetsr   r   r&  s     r<   r   z'XCodeBackend.generate_native_target_map  s5     ## 	3A%)[[]D"	3r>   c                   i | _         i | _        i | _        | j                  j	                         D ]  \  }}| j                         | j                   |<   t        |t        j                        s>| j                  |      \  }}}|D ]<  }| j                         | j                  |<   | j                         | j                  |<   >  y r7   )
shell_targetscustom_target_output_buildfilecustom_target_output_filerefr   rJ   r   rL   r   CustomTargeteval_custom_target_command)r;   r   r  srcs
ofilenamescmdr   s          r<   r   z'XCodeBackend.generate_custom_target_map  s    .0+,.)++113 	EHE1(,Du%a!3!34&*&E&Ea&H#T:s E9=33A67;{{}11!4E	Er>   c                   i | _         i | _        | j                  j                         D ]L  \  }}d}|j                  D ]6  }t        |t        j                        s| j                  ||||       |dz  }8 N | j                  j                         D ]L  \  }}d}|j                  D ]6  }t        |t        j                        s| j                  ||||       |dz  }8 N y Nr   r   )generator_fileref_idsgenerator_buildfile_idsr   rJ   	generatedrL   r   GeneratedListgen_single_target_mapr   r  )r;   r   r  generator_idgenlists        r<   r   z*XCodeBackend.generate_generator_target_map  s     &("')$**002 	"HE1L;; "!'5+>+>?**7E1lK!	"	" ++113 	"HE1L99 "!'5+>+>?**7E1lK!	"	"r>   c                   ||f}|| j                   vsJ | j                         | j                   |<   g }|j                         D ]  }|j                  |      D ]x  }t        j
                  j                  | j                  |      |      }	|j                  t        j
                  j                  | j                  j                         |	             z  || j                  vsJ || j                  |<   g }
g }t        t        |            D ]@  }|
j                  | j                                |j                  | j                                B |
| j                  |<   || j                  |<   y r7   )r*  r   
get_inputsget_outputs_forr   r   r   get_target_private_dirrN   r   r   r   ranger   r5  r4  )r;   r:  r   r  r9  k	ofile_absrZ   o_baser   r   r   s               r<   r8  z"XCodeBackend.gen_single_target_map  sO   L!***** $1	##% 	TA!11!4 TGGLL!<!<Q!?H  d.>.>.L.L.NPQ!RST	T .....$-q!s9~& 	.A  /t{{}-	. +8$$Q'(3""1%r>   c                >   i | _         i | _        | j                  j                         D ]r  }|j	                         D ]]  }|j
                  dk(  s|j                  D ]<  }| j                         | j                   |<   | j                         | j                  |<   > _ t y )Nappleframeworks)native_frameworksnative_frameworks_filerefr   valuesget_external_depsr  
frameworksr   )r;   r  depfs       r<   r   z+XCodeBackend.generate_native_frameworks_map  s    !#)+&##**, 	JA**, J8800 ^^ J48KKM..q1<@KKM66q9JJ	Jr>   c                "   i | _         | j                  j                         D ]  \  }}|j                  D ]  }t	        |t
        j                        r+||j                  j                         f}|| j                   v r#H||j                         f}|| j                   vsJ | j                         | j                   |<     | j                  j                         D ]4  \  }}|}|| j                   vsJ | j                         | j                   |<   6 y r7   )target_dependency_mapr   rJ   link_targetsrL   r   CustomTargetIndexr   get_basenamer   r   )r;   r   r  r   r@  s        r<   r   z+XCodeBackend.generate_target_dependency_map  s   %'"**002 		>HE1.. >fe&=&=> : : <=AD666  3 3 56AD$>$>>>>04**1->		> ++113 	:HE1AD66666,0KKMD&&q)	:r>   c                    i | _         i | _        | j                  D ]  }| j                         | j                   |<   ! | j                  D ]  }| j                         | j                  |<   ! y r7   )pbx_dep_mappbx_custom_dep_mapr   r   r   r&  s     r<   r   z XCodeBackend.generate_pbxdep_map  sh    "$## 	0A"&++-DQ	0$$ 	7A)-D##A&	7r>   c                n    i | _         | j                  D ]  }| j                         | j                   |<   ! y r7   )containerproxy_mapr   r   r&  s     r<   r   z(XCodeBackend.generate_containerproxy_map  s5    "$## 	7A)-D##A&	7r>   c                p    | j                  | j                         | j                  | j                         y r7   )generate_target_file_maps_implr   r   r:   s    r<   r   z&XCodeBackend.generate_target_file_maps  s*    ++D,>,>?++D,?,?@r>   c                D   |j                         D ]  \  }}|j                  D ]  }t        |t        j                        r4t
        j                  j                  |j                  |j                        }t        |t              sb||f}|| j                  vsJ | j                         | j                  |<   || j                  vsJ | j                         | j                  |<    t        |d      s|j                  D ]  }t        |t         j"                        rt        |t        j                        r4t
        j                  j                  |j                  |j                        }t        |t              rt
        j                  j                  |j                  |      }||f}|| j                  vsJ | j                         | j                  |<   || j                  vsJ | j                         | j                  |<   t%        dt        |      z           y )Nr  zUnknown input type )rJ   r  rL   r   r   r   r   r   r  r   r]   r   r   r   hasattrr  r   ExtractedObjectsr~   )r;   r9   r   r  r   r@  r   s          r<   rW  z+XCodeBackend.generate_target_file_maps_impl  s    	GHE1YY 	4a/QXXqww7A!!S)AJ 2 2222(,""1% 0 0000&*kkm  #	4 1i(YY Ga!7!78a/QXXqww7Aa%QXXq1A
AD$6$6666,0KKMD&&q)D$4$4444*.++-D$$Q'&'<s1v'EFFG	Gr>   c                    | j                   j                         D ]N  }t        |t              sJ | j	                         | j
                  |<   | j	                         | j                  |<   P y r7   )r   get_build_def_filesrL   r]   r   r   r   )r;   	buildfiles     r<   r   z%XCodeBackend.generate_build_file_maps  s\    ))==? 	8Ii---,0KKMDy)*.++-DY'	8r>   c                n    i | _         | j                  D ]  }| j                         | j                   |<   ! y r7   )source_phaser   r   r&  s     r<   r   z&XCodeBackend.generate_source_phase_map  s5    ## 	1A#';;=Da 	1r>   c                   i | _         | j                         | _        | j                  D cg c]  }| j                  |    }}| j
                  D cg c]  }| j                  |    }}g }|j                  | j                  d| j                  g | j                  g|z   |z   f       |j                  | j                  d| j                  | j                  g| j                  | j                  gf       |j                  | j                  d| j                  | j                   gg f       | j"                  j%                         j'                         D ]  \  }}| j                         }|| j                   |<   g }| j                  g}	d}
|j(                  D ]  }t+        |t"        j,                        s|j                  | j.                  ||
f          |j0                  D ].  }|	j                  | j                  |j3                                   0 |
dz  }
 |j                  | j.                  |          |j                  ||| j4                  |   ||	f        t7        |t9        j:                  d            }|D ]  }t=               }|d   }|d   }|d   }|d	   }	|j?                  d
d       |j?                  d|d| d       tA               }|j?                  d|       |D ]  }|j?                  |d        tA               }|j?                  d|       |	D ]  }|j?                  |d        |j?                  dd| d       |j?                  dd| d       |j?                  |d   ||        y c c}w c c}w )N	ALL_BUILD	RUN_TESTS
REGENERATEr   r   rn   r         isaPBXAggregateTargetbuildConfigurationList1Build configuration list for PBXAggregateTarget ""buildPhasesShellScriptdependenciesPBXTargetDependencyr  productName)!custom_aggregate_targetsr   build_all_tdep_idr   rR  r   rS  rN   r   r   r   r   r   r   r   r   r   r   r   rJ   r  rL   r7  r*  dependsr   r%  sortedoperator
itemgetterrq   rQ   rH   )r;   r  r  target_dependenciescustom_target_dependenciesaggregated_targetsr   ct_idbuild_phasesrn  r9  r   dsorted_aggregated_targetsagt_dictr  buildconf_idbp_arrbpdep_arrtds                        r<   r   z*XCodeBackend.generate_pbx_aggregate_target  s   (*%!%<@<N<NOqt//2OOJNJ]J]%^Qd&=&=a&@%^"%^!!4;;#'#8#8#%$($<$<#=@S#SVp#p#r 	s 	!!4<<#.#'#9#9$($8$8#9$($<$<d>T>T#U	#W 	X
 	!!4==#/#'#:#:$($9$9#:#%	#' 	(
 

557==? 	pHE1KKME38D))%0L 445LLYY "!!U%8%89##D$6$6|7L$MN MA ''(?(?
(KLM!"  2 25 9:%%ueT5J5J55QS_am&no	p" %++=8CVCVWXCY$Z!* 	8AyHQ4DQ4LQ4LQ4Le%9:6Hyz~y  @A  GB  CZFmV4" 3M23jGng6" <  %:;<f$qk2mqa[9!!!A$$7%	8G P%^s   M2M7c           	     	   | j                   j                         D ]  \  }}|j                         D ]  }|j                  dk(  s|j                  D ]q  }t               }| j                  |   }||j                  vr|j                  ||| d       |j                  dd       |j                  d| j                  |   |       s  |j                  D ]H  }d}	t        |t        j                        rB|j                  rd}	t        j                   j#                  |j$                  |j&                        }t        |t(              sst               }
||f}| j*                  |   }| j,                  |   }|	r9t        j                   j#                  | j.                  j1                         |      }n8t        j                   j#                  | j.                  j3                         |      }|
j                  dd       |
j                  d||       |j                  ||
       K |j4                  D ]f  }t        |t6        j8                        rt        |t        j                        r5t        j                   j#                  |j$                  |j&                        }n:t        |t(              r*t        j                   j#                  |j$                  |      }| j*                  ||f   }||f}| j,                  |   }|| j:                  vsJ || j:                  |<   t        j                   j#                  | j.                  j3                         |      }|}t               }|j                  |||       |j                  dd       |j                  d||       i d}|j<                  D ]5  }t        |t6        j>                        s| jA                  |||       |d	z  }7  | jB                  j                         D ]  \  }}t        |t6        jD                        s!| jG                  |      \  }}}|D ]a  }t               }|j                  | jH                  |   |d
| d       |j                  dd       |j                  d| jJ                  |          c d}|j                  D ]5  }t        |t6        j>                        s| jA                  |||       |d	z  }7  y )NrD  .framework in Frameworksrg  PBXBuildFilefileRefFTr   r   rc   rd   )&r   rJ   rH  r  rI  rq   rE  rt   rQ   rF  r  rL   r   r   is_builtr   r   r   r  r   r]   r   r   r   r   get_source_dirr  r   rZ  r  r6  r7  create_generator_shellphaser   r-  r.  r+  r,  )r;   r  r   r  rJ  rK  fw_dictfwkeyr   in_build_dirsdictr@  idvalfilereffullpathr   	fullpath2o_dictr9  r,   r/  r0  r1  custom_dicts                           r<   r   z$XCodeBackend.generate_pbx_build_fileU  sC   **002 ;	"HE1**, Z8800 ^^ Z")) $ 6 6q 9 (9(99(11%QCG_B`a((?((D4R4RST4UWXYZZ YY 4$a/zz'+QXXqww7A!!S)	AJ**1-**1-!ww||D,<,<,J,J,LaPH!ww||D,<,<,K,K,MqQHun5y'8<%%eU3'4* YY ?a!7!78 a/QXXqww7A3'QXXq1A**E1:6AJ**1-,,,"'Q77<<(8(8(G(G(I1M$	 %%eVX>~6	7I>)?, L[[ "!!U%8%8900ulS!	"o;	"| ++113 	"HE1a!3!34&*&E&Ea&H#T:s V%i%%d&I&I!&Lk]`ab`ccf[gh$$UN;$$Y0Q0QRS0TU	V
 LYY "!!U%8%8900ulS!	"	"r>   c                "   | j                   ||f   }| j                  ||f   }t        |      t        |      k(  sJ t        ||      D ]E  \  }}t	               }|j                  ||       |j                  dd       |j                  d|       G y )Nrg  r  r  )r5  r4  r   ziprq   rQ   )	r;   r  r   r9  file_idsref_idsfile_oref_idodicts	            r<   r  z(XCodeBackend.create_generator_shellphase  s    //0EF,,e\-BC7|s8},,,!(G4 	.NFFIE!!&%0NN5.1NN9f-		.r>   c                .   | j                   j                         D ]x  \  }}t               }|j                  |||       |j                  dd       t               }|j                  d|       |j                  dd       |j                  dd| d       z y )Nrg  PBXBuildStylebuildSettingsCOPY_PHASE_STRIPr.   r  rk  )r  rJ   rq   rQ   )r;   r  r  r  	styledictsettings_dicts         r<   r   z%XCodeBackend.generate_pbx_build_style  s    --335 	4KD%	I!!%D9uo6#IM>""#5t<v4&{3	4r>   c                j   | j                   D ]  }t               }|j                  | j                  |   |d       |j                  dd       |j                  d| j                  d       |j                  dd       |j                  d| j
                  |          |j                  dd	|z   d	z           y )
NPBXContainerItemProxyrg  containerPortalProject object	proxyTyper(   remoteGlobalIDString
remoteInfork  )r   rq   rQ   rU  r   r(  )r;   r  r  
proxy_dicts       r<   r   z.XCodeBackend.generate_pbx_container_item_proxy  s    ## 	=A J!!$"9"9!"<jJab'>? 143C3CEUVS1 68K8KA8NOcAgm<	=r>   c           	        | j                   j                         D ]W  \  }}|j                         D ]  }|j                  dk(  s|j                  D ]  }t               }| j                  |   }|j                  |      r.|j                  |||       |j                  dd       |j                  dd       |j                  d| d       |j                  dd	| d       |j                  d
d         |j                  D ]  }d}	t        |t        j                        rB|j                  rd}	t        j                  j!                  |j"                  |j$                        }t        |t&              ss| j(                  ||f   }
t        j                  j!                  | j*                  j-                         |      }t               }| j/                  |      }t        j                  j1                  |      }|}|j                  |
||       |j                  dd       |j                  dd|z   dz          |j                  dd       |	rD|j                  dd|z   dz          |j                  dd|z   dz          |j                  d
d       |j                  dd|z   dz          |j                  dd|z   dz          |j                  d
d        d}|j2                  D ]g  }t        |t4        j6                        s| j8                  ||f   }| j:                  ||f   }t=        |      t=        |      k(  sJ t?        ||      D ]  \  }}t               }t        j                  j1                  |      }|j                  |||       | j/                  |      }t        j@                  || j*                  j-                               }|j                  dd       |j                  dd|z   dz          |j                  dd       |j                  dd| d       |j                  dd| d       |j                  d
d        |dz  }j |jB                  D ]  }t        |t4        jD                        rt        |t        j                        rw|jG                  | j*                  j-                         | j*                  jI                               }t        j                  j!                  |j"                  |j$                        }nbt        j                  j!                  |j"                  |      }t        j                  j!                  | j*                  j-                         |      }| j(                  ||f   }
t        j@                  || j*                  j-                               }t               }t        j                  j1                  |      }|j                  |
||       |j                  dd       |j                  dd| j/                  |      z   dz          |j                  dd       |j                  dd| d       |j                  dd| d       |j                  d
d        Z | jJ                  j                         D ]8  \  }}
t               }|j                  |
||       | j                   |   }|jM                         }d}t        |t4        jN                        rd}|}nRt        |t4        jP                        r| j/                  d      }|}n$| j/                  |      }d|jM                         z  }|j                  dd       |j                  dd|z   dz          d|v r|d   dk7  r|j                  dd| d       n|j                  d|       |j                  d|       |j                  d
d       ; | jR                  j                         D ]e  \  }}t        |t4        jT                        s"| jW                  |      \  }}}|j                  D ]D  }t        |t        j                        r5t        j                  j!                  |j"                  |j$                        }n<t        |t&              r+t        j                  j!                  |j"                  |      }nt               } | j/                  |      }| j                  dd       | j                  dd|z   dz          | j                  dd| d       | j                  dd| d       | j                  dd       | j                  d
d       |j                  | j(                  ||f   |        G |D ]  }t               } | j/                  |      }| j                  dd       | j                  dd|z   dz          | j                  d|       | j                  dt        j                  j!                  | jX                  |             | j                  dd       | j                  d
d       |j                  | jZ                  |   |         h | j\                  j_                         D ]  }!t        j                  ja                  |!      d   }"t               }#| j/                  |!      }|#j                  dd       |#j                  dd|z   dz          |#j                  dd|" d       |#j                  dd|! d       |#j                  dd       |#j                  d
d       |j                  | j(                  |!   |#        y )NrD  rg  PBXFileReferencelastKnownFileTypezwrapper.frameworkr  z
.frameworkr   zSystem/Library/Frameworks/
sourceTreeSDKROOTFTexplicitFileTyperk  fileEncoding4
BUILD_ROOTSOURCE_ROOTr   r   zcompiled.mach-o.executablezdummy.dylib"%s"rS   refTypeBUILT_PRODUCTS_DIR)1r   rJ   rH  r  rI  rq   rF  rx   rQ   r  rL   r   r   r  r   r   r   r  r   r]   r   r   r  r  r   r6  r   r7  r   r4  r   r  relpathr  rZ  absolute_pathr   r  get_filename
ExecutableSharedLibraryr   r-  r.  src_to_buildr,  r   r\  r   )$r;   r  r   r  rJ  rK  r  framework_filerefr   r  r  r  src_dictr
  r  r   r9  r,   outputsr  r   r  r  rel_namer  target_dictr   reftypetypestrr/  r0  r1  r  r]  r   buildfile_dicts$                                       r<   r   z(XCodeBackend.generate_pbx_file_reference  s	   **002 U	=HE1**, B8800 ^^ 
B")),0,J,J1,M)'001BC$$--.?!L((0BC(()<>QR((A3j1AB((3MaSPZ1[\((yA
BB YY C$a/zz'+QXXqww7A!!S)((%477<<(8(8(G(G(I1M"9 ..q1	ww''*%%eXx@!!%);<!!"4cIo6KL!!.#6%%fcDj3.>? %%fcDj3.>?%%lLA%%fcDj3.>?%%fcDj3.>?%%lMB7C: L[[ "!!U%8%8900%1FG44UL5HI7|s7|333!$Wg!6 @IAv#IE77++A.D ))&%; $ 2 21 5I'//43C3C3R3R3TUHNN5*<=NN#5sY7LMNN>37NN6QtfA;7NN6Qxj?;NN<?@ !'"* YY =a!7!78a/ t/?/?/N/N/PRVRbRbRpRpRrsHQXXqww7AQXXq1A!ww||D,<,<,K,K,MqQH((%4#++Hd6F6F6U6U6WX ww''*%%eVX>'9: 2C$:L:LQ:O4ORU4UV4!D64!H:Q8m<)=CU	=l !//557 	ELE5!)K!!%e<""5)ANN$EG!U--.6Au223,,];,,U3 00  (:;  !3S7]S5HId{tAw#~$$Vqa[9$$VT2  G4  /CD-	E0 ++113 	YHE1a!3!34&*&E&Ea&H#T:sYY Qa/QXXqww7A3'QXXq1A%i,,Q/$$U,>?$$%7w9LM$$Vq1X6$$Vq1X6$$Y2$$\=A%%d&6&6qz&BKPQ    	Y%i,,Q/$$U,>?$$%7w9LM$$VQ/$$VRWW\\$:K:KQ-OP$$Y2$$\=A%%d&G&G&JKX	Y)	Y> ))==? 
	OIww}}Y/2H$YN((3G##E+=>##$6g8KL##FazO<##Fa	{!,<=##Iq1##L-@!!$"2"29"=~N
	Or>   c                   | j                   j                         D ]  }t               }|j                  |j                  d   |d       |j                  dd       |j                  dd       t               }|j                  d|       |j                         D ]E  }|j                  dk(  s|j                  D ]$  }|j                  | j                  |   | d       & G |j                  d	d
        y )Nr  rg  PBXFrameworksBuildPhasebuildActionMaskfilesrD  r  "runOnlyForDeploymentPostprocessingr   )
r   rG  rq   rQ   r  rH   rH  r  rI  rE  )r;   r  r  bt_dict	file_listrJ  rK  s          r<   r   z/XCodeBackend.generate_pbx_frameworks_buildphase]  s    ##**, 	FAiG!!!//,"?,WU$=>.
; 
IWi0**, f8800 ^^ f!**4+A+A!+DKcFdeff A1E	Fr>   c           	        i }i }| j                   D ](  }| j                         ||<   | j                         ||<   * | j                  D ](  }| j                         ||<   | j                         ||<   * | j                         }| j                         }| j                         }| j                         }t               }	|j	                  | j
                  |	       |	j	                  dd       t               }
|	j	                  d|
       |
j	                  |d       |
j	                  |d       |
j	                  |d       |
j	                  |d       |	j	                  dd	       | j                  ||       t               }|j	                  ||d       |j	                  dd       t               }|j	                  d|       |j	                  d
d       |j	                  dd	       t               }|j	                  ||d       |j	                  dd       t               }|j	                  d|       | j                   j                         D ]W  }|j                         D ]B  }|j                  dk(  s|j                  D ]!  }|j	                  | j                  |   |       # D Y |j	                  d
d       |j	                  dd	       | j                  j                         D ]  \  }}t               }|j	                  ||   ||       |j	                  dd       t               }|j	                  d|       |j	                  ||   d       |j                  r.|j	                  d
d|j                   d|j                   d       n |j	                  d
d|j                   d       |j	                  dd	       t               }|j	                  ||   |d       |j	                  dd       t               }|j	                  d|       |j                  D ]  }t!        |t"        j$                        r5t&        j(                  j+                  |j,                  |j.                        }n<t!        |t0              r+t&        j(                  j+                  |j,                  |      }n|j	                  | j2                  ||f   |        |j	                  d
d       |j	                  dd	        t               }|j	                  ||d       |j	                  dd       t               }|j	                  d|       | j                   D ]!  }|j	                  | j4                  |   |       # |j	                  d
d       |j	                  dd	       y )Nrg  PBXGroupchildrenzProject treer  Productsr  r  	"<group>"r  rD  zSource filesrk  u    • "Source files")r   r   r   rq   rQ   r   rH   add_projecttreerG  rH  r  rI  rF  rJ   
subprojectr  rL   r   r   r   r   r   r  r   r]   r   r  )r;   r  groupmaptarget_src_mapr  projecttree_idresources_idproducts_idframeworks_id	main_dictmain_childrenresource_dictresource_childrenframeworks_dictframeworks_childrenrJ  rK  r   r  target_childrensource_files_dictsource_file_childrenr   product_dictproduct_childrens                            r<   r   zXCodeBackend.generate_pbx_groupk  s   ## 	.A++-HQK $N1	. $$ 	.A++-HQK $N1	. {{}kkmI	d//;5*- 
:}5~~>|[9{J7}l;<5\>:	lM;Guj1$Jz+<=v{3|[9!)m_lK  
3&j  -@A ##**, 	[A**, [8800 ^^ [+44T5S5STU5VXYZ[[	[ 	  6  {;++113 	BHE1!)K!!(5/;F  
3&jO  _=$$^E%:NK||$$VqeAFF81-MN$$Vq];  {; '	!!."79JN[&&uj9#+: &&z3GHYY Oa/QXXqww7A3'QXXq1A$--d.>.>qz.JANO &&v/?@&&|[A5	B: yk<DeZ0#:j*:;## 	AA%%d&9&9!&<a@	Afj1lK8r>   c                   |j                         }| j                         }t               }|j                  |||       |j                  dd       t	               }|j                  d|       |j                  dd| d       |j                  dd       t               }|j
                  D ]  }t        |t        j                        r5t        j                  j                  |j                  |j                        }n<t        |t              r+t        j                  j                  |j                  |      }n|j                  | j                  ||f   |        |j                   D ]  }	t        |	t"        j$                        rt        |	t        j                        r5t        j                  j                  |	j                  |	j                        }	n*t        j                  j                  |j                  |	      }	|j                  | j                  ||	f   |	        |j                  dd	       |j                  dd       |S )
Nrg  r  r  r  rk  u    · target"r  r  r  )r   r   rq   rQ   rH   r  rL   r   r   r   r   r   r  r   r]   r   r  r   rZ  )
r;   r  r  tidgroup_idr  r  r  r   r   s
             r<   write_group_target_entryz%XCodeBackend.write_group_target_entry  s   hhj;;=ihS9UJ/"*Z9Vq;%78\;7#I 	DA!X]]+GGLL1773As#GGLL1-$$T%5%5sAh%?C	D  	DA!U334!X]]+GGLL1773GGLL1-$$T%5%5sAh%?C	D 	""6+;<""<=r>   c                *   t               }|j                  ||d       |j                  dd       t               }|j                  d|       |j                  dd       |j                  dd       | j                         }| j	                  |||d	       y )
NzRoot of project treerg  r  r  r  z"Project root"r  r  r\   )rq   rQ   rH   generate_project_tree
write_tree)r;   r  r  	root_dictr  project_trees         r<   r  zXCodeBackend.add_projecttree  s    I	ni9OP5*-"*:76#34<5113lORHr>   c           
     f   |j                   j                         D ]  \  }}t               }t               }| j	                         }	|j                  |	|       |j                  |	       |j                  dd       |j                  d|       |j                  dd| d       |j                  dd       | j                  |||t        j                  j                  ||              |j                  D ]%  }
| j                  ||
      }|j                  |       ' t        j                  j                  |d      t        j                  j                  |d	      t        j                  j                  |d
      g}|D ]2  }| j                  j                  |d       }|s"|j                  |       4 y )Nrg  r  r  r  rk  r  r  zmeson.buildzmeson.optionszmeson_options.txt)r8   rJ   rq   rH   r   rQ   r  r   r   r   r9   r  r   r  )r;   r  	tree_nodechildren_arraycurrent_subdirsubdir_namesubdir_nodesubdir_dictsubdir_children	subdir_idr   r  
potentialsbfrZ   s                  r<   r  zXCodeBackend.write_tree  s|   (1(9(9(?(?(A 
	s$K!)K&jOI!!)[9##I.  
3  _=  1[M);<  {;OOL+UcepHqr
	s  '' 	.F44\6JH##H-	. ggll>=Aggll>?Cggll>3FGI
  	+B  $$R.A''*	+r>   c                    t               }| j                  j                         D ]  \  }}| j                  ||        |S r7   )r5   r   rJ   add_target_to_tree)r;   	tree_infor   r  s       r<   r  z"XCodeBackend.generate_project_tree  sA    !O	**002 	2HE1##Iq1	2r>   c                    |}|j                   j                  d      }|D ]9  }|s||j                  vrt               |j                  |<   |j                  |   }; |j                  j                  |       y )Nr   )r  r   r8   r5   r9   rN   )r;   	tree_rootr  current_nodepath_segmentsr   s         r<   r  zXCodeBackend.add_target_to_tree  st     s+ 	3A,,,*7/$$Q''//2L	3 	##A&r>   c           	     	   | j                   j                         D ]h  \  }}t               }| j                  |   }|j	                  |||       |j	                  dd       |j	                  d| j
                  |   d| d       t               }|j	                  d|       d}|j                  D ]I  }t        |t        j                        s|j	                  | j                  ||f   d| d	|        |d
z  }K |j                  j                         D ]  \  }	}
|j	                  |
|	 d        |j	                  dt                      t               }|j	                  d|       |j	                  | j                         | j                  |   j                  D ]  }t        |t        j                        r8|j	                  | j                   |j#                            |j$                         Ut        |t        j&                        rL|j	                  | j                   |j(                  j#                            |j(                  j$                         | j*                  |j#                            }|j	                  |d        |j,                  D ]X  }t        |t        j.                        s|j(                  j#                         }| j*                  |   }|j	                  |d       Z d}|j                  D ]  }t        |t        j                        r8|j	                  | j                   |j#                            |j$                         net        |t        j&                        rK|j	                  | j                   |j(                  j#                            |j(                  j$                         |d
z  } |j	                  dd| d       |j	                  dd| d       |j	                  d| j0                  |   |       t        |t        j2                        rd}nHt        |t        j4                        rd}n+t        |t        j6                        rd}nt9        d|z        |j	                  dd| d       k y )Nrg  PBXNativeTargetri  .Build configuration list for PBXNativeTarget "rk  rl  r   z
Generator r   r   z yyy
buildRulesrn  ro  r  rp  productReferencezcom.apple.product-type.toolz%com.apple.product-type.library.staticz&com.apple.product-type.library.dynamiczUnknown target type for %sproductType)r(  rJ   rq   r   rQ   r%  rH   r6  rL   r   r7  r*  r  r   rN  r-  rS  r   r  rO  r   rR  r  rZ  r  r  StaticLibraryr  r   )r;   r  r   r  ntarget_dictr  buildphases_arrayr9  r,   bpnamebpval	dep_arrayltr   source_target_idr  s                   r<   r   z'XCodeBackend.generate_pbx_native_target  s    //557 ;	ALE5"9L""5)A!!%u=!!%):;!!":D<Q<QRW<X  ]K  LQ  KR  RS  [T  U (
!!-1BCL[[ & a!4!45%..t/A/A5,BW/X\fgsfttuv{u|Z}~ A%L& "#!6!6!8 C!**5VHD/BC!!,
; 
I!!.)<t778 ((/<< 	E b%"4"45&&t'>'>ryy{'KRWWUE$;$;<&&t'>'>ryy?O?O?Q'RTVT]T]TbTbc ,,RYY[9E&&u.CD	E YY Ea!7!78'(xx'8$ ,,-=>E&&u.CD	E
 L[[ "a!3!34&&t'>'>qxxz'JAFFS5#:#:;&&t'>'>qxx?P'QSTS[S[S`S`a!" !!&AeWA,7!!-1UG1>!!"4d6I6I%6PRWX!U--.7Au223AAu223B$%AE%IJJ!!-1WIQ@w;	Ar>   c                   t               }|j                  | j                  |d       |j                  dd       t               }|j                  d|       |j                  dd       |j                  d| j                  d| j                  j
                   d	       |j                  d
t                      t               }|j                  d|       | j                  j                         D ]  \  }}|j                  ||        |j                  dd       |j                  dd       |j                  d| j                         |j                  dd	| j                  j                         z   d	z          |j                  dd       t               }|j                  d|       |j                  | j                  d       |j                  | j                  d       |j                  | j                  d       | j                  D ]!  }|j                  | j                   |   |       # | j"                  D ]!  }|j                  | j$                  |   |       # y )Nr  rg  
PBXProject
attributes!BuildIndependentTargetsInParallelr-   ri  )Build configuration list for PBXProject "rk  r  buildStylescompatibilityVersionz"Xcode 3.2"hasScannedForEncodingsr   	mainGroupprojectDirPathprojectRoot""r9   ra  rb  rc  )rq   rQ   r   r   r   r   rH   r  rJ   r   r   r  r   r   r   r   r(  r   rq  )	r;   r  project_dict	attr_dict	style_arrr  r  targets_arrr  s	            r<   r   z!XCodeBackend.generate_pbx_projectV  s.   yd..>NOe\2I	lI6>F68M8MQz{  |F  |F  |S  |S  {T  TU  PV  	Wowy9J	mY7--335 	,KD%ud+	,4mD6:k4+<+<=.d6F6F6U6U6W0WZ]0]^mT2ji5T[[+6T\\;7T]]L9## 	<A  !4!4Q!7;	<$$ 	FA  !>!>q!A1E	Fr>   c                    | j                  |       | j                  |       | j                  |       | j                  |       y r7   )generate_test_shell_build_phase generate_regen_shell_build_phase)generate_custom_target_shell_build_phases,generate_generator_target_shell_build_phases)r;   r  s     r<   r   z+XCodeBackend.generate_pbx_shell_build_phaser  s:    ,,\:--l;66|D99,Gr>   c                   t               }|j                  | j                  |d       |j                  dd       |j                  dd       |j                  dt                      |j                  dt                      |j                  dt                      |j                  d	d
       |j                  dd       t	        j
                         ddd| j                  j                         gz   }dj                  |D cg c]  }d|z  	 c}      }|j                  dd| d       |j                  dd
       y c c}w )Nrm  rg  PBXShellScriptBuildPhaser  r  r  
inputPathsoutputPathsr  r   	shellPath/bin/shtestz--no-rebuildz-CrS   '%s'shellScriptrk  showEnvVarsInLog)	rq   rQ   r   rH   r   get_meson_commandr   r   r   r;   r  
shell_dictr1  rZ   cmdstrs         r<   r   z,XCodeBackend.generate_test_shell_build_phasex  s   Y
d22JNE#=>-z:GXZ0L(*5M8:6@!DK3((*fndDL\L\LjLjLl-mms3!6A:34MQvha=9.2 4s    D<c                   t               }|j                  | j                  |d       |j                  dd       |j                  dd       |j                  dt                      |j                  dt                      |j                  dt                      |j                  d	d
       |j                  dd       t	        j
                         ddt        j                  j                  | j                  j                         d      gz   }dj                  |D cg c]  }d|z  	 c}      }|j                  dd| d       |j                  dd
       y c c}w )Nrm  rg  r%  r  r  r  r&  r'  r  r   r(  r)  z
--internal
regencheckzmeson-privaterS   r+  r,  rk  r-  )rq   rQ   r   rH   r   r.  r   r   r   r   r   r/  s         r<   r!  z-XCodeBackend.generate_regen_shell_build_phase  s-   Y
d33ZOE#=>-z:GXZ0L(*5M8:6@!DK3((*lL"'',,W[WgWgWuWuWw  zI  KJ  .K  Ks3!6A:34MQvha=9.2 4s   Ec           
        | j                   j                         D ]Y  \  }}t        |t        j                        s"| j                  |d      \  }}}| j                  |d   |dd  |j                  r|d   nd |j                  r|d   nd |j                        \  }}t               }	|j                  | j                  |   |	d| d       |	j                  dd	       |	j                  d
d       |	j                  dt                      |	j                  dt                      t               }
|	j                  ddj                  |d                |	j                  d|
       |D ]I  }|
j                  t        j                   j#                  | j$                  j'                         |             K |	j                  dd       |	j                  dd       | j$                  j'                         }g }|D ]/  }|j)                  |j+                  dt-        d      dz                1 dj#                  |D cg c]  }d| d
 c}      }|	j                  dd| d| d       |	j                  dd       \ y c c}w )NT)absolute_outputsr   r   )r   feedenvz/* Custom target rd   rg  r%  r  r  r  r&  r  z"Generate {}."r'  r  r(  r)  rk  \   rS   z\'r,  z"cd z; r-  )r   rJ   rL   r   r-  r.  as_meson_exe_cmdliner   r6  r7  rq   rQ   r*  rH   formatr   r   r   r   r   rN   r   chr)r;   r  r   r  r/  r0  r1  	fixed_cmd_r  outarrayr   workdir
quoted_cmdr   xr1  s                    r<   r"  z6XCodeBackend.generate_custom_target_shell_build_phases  sU   ++113 	8HE1a!3!34&*&E&EaZ^&E&_#T:s44SV58WNOiiZ]]aEFVV$q'QU9:	 5 @LIq
 ")K!!$"4"4U";[L]^c]ddgJhi  (BC  !2J?  (*5  xz:zH  )9)@)@A)OP  9 U!!"'',,t/?/?/M/M/OQR"STU  !EqI  i8&&446GJ A!!!))CR3"?@AXXZ@QCs|@AF  $wir&0KL  !3Q79	84 As   6I9
c           	        | j                   j                         D ]M  \  }}d}|j                  D ]7  }t        |t        j
                        s| j                  |||||       |dz  }9 O | j                  j                         D ]M  \  }}d}|j                  D ]7  }t        |t        j
                        s| j                  |||||       |dz  }9 O y r3  )	r   rJ   r6  rL   r   r7  generate_single_generator_phaser   r  )r;   r  r   r  r9  r:  s         r<   r#  z9XCodeBackend.generate_generator_target_shell_build_phases  s    **002 	&HE1L;; &gu':':;887LZfg A%L&	& ++113 	&HE1L99 &gu':':;887LZfg A%L&	&r>   c           
     8   |j                         }|j                         }| j                  |      }| j                  j	                         }	t               }
|j                  | j                  ||f   |
d| d| d       |j                         }|j                         }|
j                  dd       |
j                  dd       |
j                  dt                      |
j                  d	t                      |
j                  d
d| d| d       d|	gg}||f}| j                  |   }t               }|
j                  d|       |D ]  }|j                  |        |D ]}  }|j                  | j                        }|j                  |      }|j                  |      D ]9  }t         j"                  j%                  | j'                  |      |      }g }|D ]  }|j)                  d|      }|j)                  d|      j)                  d| j'                  |            }|j)                  dt         j"                  j%                  | j                  |j*                              }|j-                  |        | j/                  || j'                  |      |      }| j1                  ||      }|j2                  rdg|z   |z   d|dgz   }n||z   }|j-                  |       <  |
j                  dd       |
j                  dd       g }|D ]V  }g }|D ]-  }d|v r|j-                  d| d       |j-                  |       / |j-                  dj%                  |             X ddj%                  |      z   dz   }|
j                  d|       |
j                  dd       y )Nz"Generator r   rk  rg  r%  r  r  r  r&  r  cdr'  z@INPUT@z@OUTPUT@z@BUILD_DIR@z@CURRENT_SOURCE_DIR@(>)r  r   r(  r)  rS   \"z && r,  r-  )get_generatorget_exebuild_target_to_cmd_arrayr   r   rq   rQ   r*  r<  get_outputsrH   r   rel_to_builddirbuild_to_srcget_arglistr=  r   r   r   r>  r   r  rN   replace_outputsreplace_extra_argsr   )r;   r   r  r:  r9  r  	generatorexeexe_arrr?  gen_dict
infilelistoutfilelistcommandsr@  rA  r>  ofrZ   
infilename	base_argsrB  r   argsargfull_commandquoted_cmdscmndqr   r1  s                                  r<   rC  z,XCodeBackend.generate_single_generator_phase  s    ))+	!005""0029d00%1FGU`am`nnopuovvwSxy'')
))+%!;<+Z8'8:.,
3&K~QugQ"GH7O$L!**1-	:-2 	"Bb!	" 	.A
 **4+<+<=J!--j9I!11!4 .GGLL!<!<Q!?H$ %C++i<C++j!4<<]DLgLghiLjkC++&<bggll4K\K\^_^f^f>ghCKK$	%
 ++D$2M2Ma2PR]^..tW=$$$'57?T#9S!SM#IL#*T>L-.	.. 	>B+y1 	,DA  !8HHs1#S\*HHQK	 
 sxx{+	, v{{;//#5-0,a0r>   c           
        | j                   D ]  }t               }| j                  |   }|j                  |j                  |   |d       |j                  dd       |j                  dd       t               }|j                  d|       | j                  |   j                  D ]  }t        j                  j                  |j                  |j                        }| j                  j                  |      rS|j                  | j                  ||f   t        j                  j                  | j                  j                         |              d}|j                   D ]t  }t#        |t$        j&                        rr| j)                  |      \  }	}
}|
D ]W  }|j                  | j*                  |   t        j                  j                  | j                  j-                         |             Y t#        |t$        j.                        rl|j1                         D ]W  }|j                  | j*                  |   t        j                  j                  | j                  j-                         |             Y t#        |t$        j2                        r0| j4                  ||f   }|dz  }|D ]  }|j                  |        `t7        d	t9        |      z          |j                  d
d        y )Nr  rg  PBXSourcesBuildPhaser  r  r  r   r   zUnknown input type: r  )r_  rq   r   rQ   r  rH   r  r   r   r   r  r   r   	is_headerr   r  r6  rL   r   r-  r.  r+  r   rO  rM  r7  r5  r~   r]   )r;   r  r  
phase_dictr  file_arrr   r9  gtr/  r0  r1  r   genfiless                 r<   r   z-XCodeBackend.generate_pbx_sources_build_phase  s   %% 	ID J""4(A!!!//$"7YO'=> 1:>zH2''-55 yGGLL1773''11!4%%d&8&8$&CRWW\\RVRbRbRqRqRsuvEwxy Lkk Ib%"4"45.2.M.Mb.Q+T:s' ] ))$*M*Ma*P*,'',,t7G7G7U7U7WYZ*[]]  E$;$;<^^- ] ))$*M*Ma*P*,'',,t7G7G7U7U7WYZ*[]]  E$7$78#;;T<<PQH A%L% - ))!,- ''=B'GHH!I"  DaH=	Ir>   c                B   t               }|j                  | j                  |d       |j                  dd       |j                  d| j                         g }|j	                  | j
                  | j                  dd f       | j                  D ]@  }| j                  |   }|j	                  || j                  |   || j                  |   f       B | j                  D ]3  }| j                  |   }|j	                  || j                  |   |d f       5 t        |t        j                   d            }|D ]i  }t               }|j                  |d   |d       |j                  dd       |j                  d|d   |d	          |d
   T|j                  d|d
   d       k y )Nra  rg  ro  r   REGENr   rd  r   r   re  targetProxyr  )rq   rQ   rr  r   rN   r   r   r   rR  r(  rU  r   rS  rq  rt  ru  rv  )r;   r  all_dictr9   r  r  sorted_targetst_dicts           r<   r   z+XCodeBackend.generate_pbx_target_dependency"  s   9d44hL%!67(DKK000$--$OP## 	[A$$Q'ENNE4#6#6q#91d>U>UVW>XYZ	[ $$ 	OA++A.ENNE4#@#@#CQMN	O
  X-@-@-CD 	NAYF!!!A$0EFOOE#89OOHadAaD1tqt5LM	Nr>   c                   | j                   D ]  }t               }|j                  | j                  |   ||       |j                  dd       t               }|j                  d|       |j                  dd       |j                  dd       |j                  dd	       |j                  d
d       |j                  dd| j                  j                         z         |j                  dd| d        | j                   D ]  }t               }|j                  | j                  |   ||       |j                  dd       t               }|j                  d|       |j                  dd| j                  j                         z         t               }|j                  d       |j                  d|       |j                  dd| d        | j                   D ]  }t               }|j                  | j                  |   ||       |j                  dd       t               }|j                  d|       |j                  dd| j                  j                         z         t               }|j                  d|       |j                  d       |j                  dd| d        | j                  j                         D ]  \  }}| j                  |||        | j                  j                         D ]  \  }}t               }|j                  | j                  |      ||       |j                  dd       t               }|j                  d|       |j                  dd       |j                  dd       |j                  d
d       |j                  dd| j                  j                         z         |j                  dd| d        y )Nrg  XCBuildConfigurationr  ARCHSz"$(NATIVE_ARCH_ACTUAL)"ONLY_ACTIVE_ARCHr-   SWIFT_VERSIONz5.0r  z"macosx"SYMROOTz
"%s/build"r  rk  r  "$(inherited)"WARNING_CFLAGS)r   rq   rQ   r  r   r   r!  rH   r#  r   rJ   generate_single_build_targetr   r  )r;   r  r   r  r  
warn_arraytarget_namer   s           r<   r   z,XCodeBackend.generate_xc_build_configuration;  s    	7IiG!!$"="=i"H'S\]U$:;#IM_m<""7,EF""#5u=""?E:""9j9""9lT=M=M=[=[=].]^Vq1%56	7  	7IiG!!$">">y"I7T]^U$:;#IM_m<""9ft7G7G7U7U7W.WX!J 01""#3Z@Vq1%56	7  
	7IiG!!$":":9"EwPYZU$:;#IM_m<""9ft7G7G7U7U7W.WX!J""#3Z@ 01Vq1%56
	7 $(#5#5#;#;#= 	QK--lKP	Q $(#6#6#<#<#> 
	7KiG!!$"3"3K"@"KWV_`U$:;#IM_m<""7,EF""#5u=""9j9""9lT=M=M=[=[=].]^Vq1%56
	7r>   c                2   d}g }|j                   D ]  }t        |t        j                        rt        |t        j                        r9t        |t        j
                        r,| j                  |j                        }|j                         }n]t        |t        j                        r"| j                  |      }|j                         }n!| j                  |      }|j                         }t        j                  j                  | j                  j                         ||      }|j!                  d|z         t        |t        j"                        rd}t        |t        j$                        sa| j'                  ||      \  }	}
||	z  }|xs |
} ||fS )NFr+  T)rN  rL   r   SharedModuler  rO  r   r   r  r-  r   r   r   r   r   r   rN   r  r   determine_internal_dep_link_args)r;   r   r   links_dylibdep_libslrel_dirlibnameabs_pathsub_libssub_links_dylibs              r<   r}  z-XCodeBackend.determine_internal_dep_link_argsu  sP   $$ 	=A&%"4"45*QHXHX:Y!U445;;AHHE..*Au112;;A>..*--a0..*ww||D$4$4$B$B$DgwWHOOFX-.!U001"!U001.2.S.STUW`.a+?H$)<_'	=( +&&r>   c           
        | j                   D ]  }g }d}g }|j                  D ]$  }|j                  D ]  }	t        j                  j                  |j                  |	      }
|j                  t        j                  j                  | j                  j                         |
             |j                  t        j                  j                  | j                  j                         |
              |j                  D ]I  }|j                  t        j                  j                  | j                  j                         |             K ' | j                  ||      \  }}|rddg|z   }d }t        |t        j                        ryt        |t        j                         rg }ndg}|dg|z   z  }t        j                  j                  | j                  j                         |j"                  |      }|j$                  }n|}d}||j'                         dz   |z   }n|j'                         }||j(                  z  }| j+                  |      r|j,                  d   g }}n| j/                  |      \  }}t        |t        j0                        s]|| j                  j3                  ||j4                  |j6                        z  }|| j                  j9                  ||j6                        z  }g }|j;                         D ](  }||j=                         z  }||j?                         z  }* |j@                  D ]  }t        |t        jB                        stE               }| jG                  |      D ]q  }t        j                  j                  | j                  j                         |jH                  j"                  |      }||vsU|jK                  |       |d|z   dz   gz  }s  d	}|jL                  D ]  }t        |t        jN                        rM| jP                  ||f   }|d
z  }|D ]1  }|jS                  d      s|jS                  d      s&|d|z   dz   gz  }3 kt        |t        jT                        r| jW                  |      \  }}}|D ]m  }t        j                  jY                  |      d   tZ        v s,|dt        j                  j                  | j                  j                         |      z   dz   gz  }o t        |t        j\                        r|j_                         D ]m  }t        j                  jY                  |      d   tZ        v s,|dt        j                  j                  | j                  j                         |      z   dz   gz  }o ta        |       t        |t        j                         r#||jc                  |je                               z  }n-t        |t        j                        r||jg                         z  }dj                  |      }| jh                  |   |   } i }!| j                  jj                  j,                  |j6                     D ]  }"|"tl        vr|j,                  jo                  |"      }#|#+|#jq                  |js                  tu        d                  }$|je                         }%|#jw                  |%      }&| j                  jx                  |j6                     jo                  |j4                  i       jo                  |"g       }'| j                  jz                  |j6                     jo                  |"g       }(|j}                  |"      })|$|&z   |'z   |(z   |)z   }*|"dk(  r-| j                  |      }+|+D ]  }|*|#j                  |d      z  }* |*sJ|},|#r#|j                  r|,| j                  ||#d      z  },|"dk(  rd}"n|"dk(  rd}"tl        |"   }-|-|!v r|!|-xx   |*z  cc<   n|*|!|-<   |!|-xx   |,z  cc<    t        j                  j                  | j                  j                         |j"                        }.t               }/|j                  | |/|       |/j                  dd       t               }0|/j                  d|0       |0j                  dd       t        |t        j                         r%|0j                  dd       |0j                  dd       n||0j                  dd| d       |j                  r|0j                  d|j                         |j                  r!d|j                  z   }1|0j                  d |1       |0j                  d!t        |js                  tu        d"                      |0j                  d#d$       t        |js                  tu        d%               }2|2|0j                  d&|2       |j                  r|j                  d      |j                  d      z   |j                  d      z   |j                  d      z   }3|3D 4cg c]8  }4|4jS                  d'      s#|4jS                  d(      s|4jS                  d)      s7|4: }3}4|3rt        |3      d
kD  r&t        j                  d*|3d+|j                   d,       t        j                  j                  |j                         |3d	         }5|0j                  d-d       |0j                  d.d/|5 d       |0j                  d0d       |0j                  d1d$       t               }6g }7|7j                  | j                  |             |j                  r|7j                  t        j                  j                  | j                  j                         |j                                      |7j                  t        j                  j                  | j                  j                         |j                                      |r7|D ]2  }8t        j                  j                  |8      }8|7j                  |8       4 |7D ]  }8|6j                  d2|8 d3        |0j                  d4|6       |0j                  d5d| d       |0j                  d6d       t        |t        j                         r%|0j                  d7d8       |0j                  d9d:       n,t        |t        j                        r|0j                  d7d;       | j                  |0|!       |0j                  d<d| d       |0j                  d=d       d|v r|0j                  d>d| d       n|0j                  d>|       |0j                  d?d       |0j                  d@d|. d       t               }9|0j                  dA|9       |0j                  dBd$       t               }:|0j                  dC|:       |:j                  dD       |/j                  dE|        y c c}4w )FNFz-Wl,-search_paths_firstz -Wl,-headerpad_max_install_namesz-dynamiclibr\   r  r   rI  r   r   r2   r3   r  rS   warning_levelT)r  r%   r   r&   r   rg  rq  r  COMBINE_HIDPI_IMAGESr-   DYLIB_CURRENT_VERSIONr  DYLIB_COMPATIBILITY_VERSIONrk  EXECUTABLE_PREFIXEXECUTABLE_SUFFIXGCC_GENERATE_DEBUGGING_SYMBOLSdebugGCC_INLINES_ARE_PRIVATE_EXTERNr.   optimizationGCC_OPTIMIZATION_LEVELz.hz.hhr   zGUnsupported Xcode configuration: More than 1 precompiled header found "z". Target "z" might not compile correctly.GCC_PRECOMPILE_PREFIX_HEADERGCC_PREFIX_HEADERz"$(PROJECT_DIR)/GCC_PREPROCESSOR_DEFINITIONSGCC_SYMBOLS_PRIVATE_EXTERNz"\"z\""HEADER_SEARCH_PATHSINSTALL_PATHLIBRARY_SEARCH_PATHSLIBRARY_STYLEBUNDLEMACH_O_TYPE	mh_bundleDYNAMICOTHER_LDFLAGSOTHER_REZFLAGSPRODUCT_NAMESECTORDER_FLAGSru  SYSTEM_HEADER_SEARCH_PATHSUSE_HEADERMAPrw  rv  r  )Tr   include_dirsincdirsr   r   r   curdirrN   r   r  r   extra_build_dirsr}  rL   r   r  r|  r  	soversionrP  	link_argsis_swift_target	compilers determine_linker_and_stdlib_argsr  get_project_link_argsr  for_machineget_global_link_argsrH  get_compile_argsget_link_argsr  rZ  rs   determine_ext_objsr   rv   r6  r7  r   endswithr-  r.  r   LINKABLE_EXTENSIONSrO  rM  r~   get_std_shared_module_link_argsget_optionsget_std_shared_lib_link_argsr  r   LANGNAMEMAPr  get_warn_argsr   r   get_option_compile_argsprojects_argsglobal_argsget_extra_argsdetermine_swift_dep_dirsget_include_argsimplicit_include_directories"get_custom_target_dir_include_argsrq   rQ   prefixsuffixBOOL2XCODEBOOLOPT2XCODEOPThas_pchget_pchr   r	   warningr  r   rH   get_target_private_dir_absr   add_otherargs);r;   r  rz  r   r   r  r~  
headerdirsr|  sdrE  extradylib_versionldargsinstall_pathproduct_namelinkerstdlib_argscargsrJ  r   
added_objsobjname_relobjname_absr9  r  o_absr/  r0  r1  ofnameldstrvalidlangargslangcompiler	warn_args
copt_proxystd_argspargsgargstargsr]  swift_dep_dirs
lang_cargslangnamesymrootr  r  r  opt_flagpchspchrelative_pch_path
header_arrunquoted_headersrZ   sysheader_arrry  s;                                                              r<   rx  z)XCodeBackend.generate_single_build_target  s    F	0IHKJ(( ])) ZBahh3B%%bggll43C3C3R3R3TVX&YZ%%bggll43C3C3Q3Q3SUW&XYZ // ]E%%bggll43C3C3Q3Q3SUZ&[\]] '+&K&KFT]&^#X{57YZ]ee M&%"5"56fe&8&89F+_F=>II!ww||D,<,<,J,J,Lfmm]fg & 0 0!!(%224s:]J%224f&&&F ##F+&,&6&6w&?&*&K&KF&S#fe&9&9:$**::66CTCTV\VhVhii$**99&&BTBTUUE//1 .--//#++--. ^^ Da!7!78!$J'+'>'>q'A D&(ggll43C3C3Q3Q3SUVU]U]UdUdfq&r&j8&NN;7"u{':U'B&CCF	D	D L%% .a!4!45"44[,5NOG A%L!( > >>$/5>>&3I"uu}u'<&==F> "!U%7%78262Q2QRS2T/z3&0 sF!ww//7;?RR &5277<<@P@P@^@^@`bh3i+ilq+q*r rs $Au'>'>?&'mmo sF!ww//7;?RR &5277<<@P@P@^@^@`bh3i+ilq+q*r rs +1o-%.& &%"4"45&@@ASASAUVVFE$7$78&==??HHV$E%%k29=EH((11;;F<N<NO )5{*!++//5#$2263D3DYE_3`a	#//1
#;;JG

001C1CDHHIZIZ\^_ccdhjlm 

..v/A/ABFFtRP--d3 8+e3e;eC7? &*%B%B6%JN+ D 9 9!U CCD!&JF$G$G #d&M&MfV^nr&M&ss
 v~")$*40H8+ *d2*-1*X&*4&S)5T ggll4#3#3#A#A#CV]]SGiG!!%)<U$:;#IM_m<""#95A&%"4"45&&'>E&&'DdK ,!**+BaVWDXY}}&&':FMMJ}}v}},&&':FC""#C^TZTeTefopwfxTyEz{""#CTJ#F$5$5i6O$PQH#&&'?J~~ ~~c*V^^E-BBV^^TZE[[^d^l^lmu^vv'+ps||D/AS\\RWEX\_\h\hin\opp4y1}'nosnv  wB  CI  CN  CN  BO  Om  &n  o(*V5F5F5H$q'(R%!**+I5Q!**+>BRSdReef@gh""#A4H""#?F!J!##D$C$CF$KL22 ''T5E5E5S5S5UW]WhWhWj(kl ''T5E5E5T5T5VX^XiXiXk(lm# /A((+A$++A./ & 4##d1#TN34""#8*E"">Q|nA3FG""#94@&%"4"45&&A&&}kBFE$7$78&&	B}h7""?awaLA""#3T:l"&&~<.7JK&&~|D""#4d;""9'!n=$JM ""#?O""?D9!J""#3Z@ 01VY/MF	0n qs   +8w9$w9c           	     V   |j                         D ]  \  }}|s	g }|D ]\  }|j                  t        d      dt        d      z        }|j                  dd      }d|v sd|v rd|z   dz   }|j                  |       ^ |j	                  d| d	ddj                  |      z   dz           y )
Nr8     rk  z\\\"rS   'rI  OTHER_FLAGS)rJ   r   r;  rN   rQ   r   )r;   r  r  r  r]  quoted_argsr   s          r<   r  zXCodeBackend.add_otherargsW  s    &nn. 	dNHd  *A 		#b'1SW95A		$0Aax3!8!AI-&&q)* &&z'?sxxP[G\A\_bAbc	dr>   c                 	   t               }|j                  | j                  |d| j                  j                   d       |j                  dd       t               }|j                  d|       | j                  D ]!  }|j                  | j                  |   |       # |j                  dd       |j                  d| j                         t               }|j                  | j                  |d	       |j                  dd       t               }|j                  d|       | j                  D ]!  }|j                  | j                  |   |       # |j                  dd       |j                  d| j                         t               }|j                  | j                  |d
       |j                  dd       t               }|j                  d|       | j                  D ]!  }|j                  | j                  |   |       # |j                  dd       |j                  d| j                         t               }|j                  | j                  |d       |j                  dd       t               }|j                  d|       | j                  D ]!  }|j                  | j                  |   |       # |j                  dd       |j                  d| j                         | j                  D ]  }	t               }
| j                  |	   }|j                  ||
d|	 d       |
j                  dd       t               }|
j                  d|       | j                   |	   | j                     }|j                  || j                         |
j                  dd       |
j                  d| j                          | j"                  D ]  }	t               }
| j                  |	   }|j                  ||
d|	 d       |
j                  dd       t               }|
j                  d|       | j                   |	   | j                     }|j                  || j                         |
j                  dd       |
j                  d| j                          y )Nr  rk  rg  XCConfigurationListbuildConfigurationsdefaultConfigurationIsVisibler   defaultConfigurationNamez;Build configuration list for PBXAggregateTarget "ALL_BUILD"z:Build configuration list for PBXAggregateTarget "RUN_TEST"z<Build configuration list for PBXAggregateTarget "REGENERATE"r  rj  )rq   rQ   r   r   r   rH   r   r  r   r   r!  r   r#  r   r   r%  r  r   )r;   r  	conf_dict	confs_arrr   rm  conf_arr	test_dict
regen_dictrz  ro  listidr  s                r<   r   z*XCodeBackend.generate_xc_configurationListf  s>   I	d33YBklplvlv  mD  mD  lE  EF  AG  	H5"78J	0)< 	RIt::9EyQ	R:A>5t~~F 9d33X?|}%!67:/: 	RId::9EyQ	R91=4dnnE I	d44iA}~5"78:0(; 	NId66yA9M	N:A>5t~~F Y
d55y  CA  	BE#89:18< 	NId66yA9M	N;Q?6G-- 
	HKYF**;7F!!&&4bcnboop2qrOOE#89zHOO18<%%k24>>BEeT^^4OO;Q?OO6G
	H  .. 
	HKYF**;7F!!&&4efqerrs2tuOOE#89zHOO18<%%k24>>BEeT^^4OO;Q?OO6G
	Hr>   c                    |j                  dd       |j                  dt                      |j                  dd       t               }|j                  d|       |S )NarchiveVersionr(   classesobjectVersion46r  )rQ   rq   )r;   pbxdictr  s      r<   r   zXCodeBackend.generate_prefix  sR    )3/GI.$/yL1r>   c                >    |j                  d| j                  d       y )N
rootObjectr  )rQ   r   )r;   r  s     r<   r   zXCodeBackend.generate_suffix  s    t'7'79IJr>   )r   zT.Optional[build.Build]r   zT.Optional[Interpreter])r@   r]   )FN)r   boolr   dictr@   zT.Optional[dict]r?   )r  rq   r@   rA   )r  rq   r@   rq   )r  rq   r@   rA   )@rC   rD   rE   r  r=   r   r   r   r   r   r   r  r  r   r   r   r   r   r   r   r   r   r   r   r8  r   r   r   r   r   rW  r   r   r   r   r  r   r   r   r   r   r  r  r  r  r  r   r   r   r   r!  r"  r#  rC  r   r   r   r}  rx  r  r   r   r   __classcell__)r   s   @r<   r   r      sT   D:'?

6L#\6=7*FGC53
E"*4&J:"77
AG<81
98vM"^.	4=XOtFW9r@
I+.	'<A|F8H338@&;1zIBN287t'2G0RdCHJKr>   r   ) 
__future__r   r   r   ru  typingr   r\   r   r   r   r	   r
   r   r   TYPE_CHECKINGr   r   rU   r  r  r  r  r  r5   rH   rM   rf   rl   rq   Backendr   rF   r>   r<   <module>r     s   #        C C??)	% \* + +	
 + ( - % ) ) ) ' + 0 .  %!" '#& !' 	  d+;  2 2*	# 	#( (
# 
#: :x}K8## }Kr>   