
    -Phw                   l   d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZddl	m
Z
 ddl	mZ ddl	mZ ddl	mZ dd	lmZ dd
lmZmZ ddlmZ ej        rddlmZ ddlmZ 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.d/d0Zd1d-iZd2d3d4d5d6d7Zdd8d8d9d:d;d+d<Zd=d>d?Zh d@Z dAdBdCdDdEdFdGdHdIdJdKdLdMZ!d_dPZ" G dQ dR          Z# G dS dT          Z$ G dU dV          Z% G dW dX          Z& G dY dZ          Z' G d[ d\          Z( G d] d^e
j)                  Z*dS )`    )annotationsN   )backends   )build)mesonlib)mlog)CompilerArgs)MesonBugExceptionMesonException)	OptionKey)BuildTarget)Compiler)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.asmzsourcecode.nasmzsourcecode.metalzsourcecode.glsl)asmmetalglslnasmC	CPLUSPLUSOBJCOBJCPLUSPLUSSWIFT_)r   r   objcobjcppr   0123)plainr-   gr.   r/   r0   r!   YESNO)TF>   .a.so.dylib.o.obj)z
Xcode 15.0<   )z
Xcode 14.08   )z
Xcode 13.07   )z
Xcode 12.06   )z
Xcode 11.45   )z
Xcode 11.04   )z
Xcode 10.03   )z	Xcode 9.32   )z	Xcode 8.00   )z	Xcode 6.3/   )z	Xcode 3.2.   )z	Xcode 3.1-   )1500140013001200114011001000930800630320310returnT.Tuple[str, int]c                 *   	 t          j        ddg          \  } }}n# t          $ r t          d          w xY w| j        dk    rt          d|           t          d                    t          j        d|          	                    d          
                    d                              }|                    d          d	k     r|d
z  }t                                          D ]\  }}t          |          |k    r|c S t          d          )N
xcodebuildz-versionzOCould not detect Xcode. Please install it if you wish to use the Xcode backend.r   z)An error occurred while detecting Xcode:  z\d*\.\d*\.*\d*.r   
   z8Your Xcode installation is too old and is not supported.)r   
Popen_safeFileNotFoundErrorr   
returncodeintjoinresearchgroupsplitcountXCODEVERSIONSitems)pcstdoutstderrversionvrs         _/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mesonbuild/backend/xcodebackend.pyautodetect_xcode_versionrl   L   s'   p%0,
1KLLFFF p p pnooop	}QQQRRR"''")$5v>>DDQGGMMcRRSSTTG||C12##%%  1q66WHHH 
S
T
TTs    7c                      e Zd ZddZdS )FileTreeEntryrR   Nonec                "    i | _         g | _        d S N)subdirstargetsselfs    rk   __init__zFileTreeEntry.__init__^   s    3524    NrR   ro   __name__
__module____qualname__rv    rw   rk   rn   rn   \   s(        5 5 5 5 5 5rw   rn   c                  (    e Zd ZddZddd	ZddZdS )PbxArrayrR   ro   c                    g | _         d S rq   )rd   rt   s    rk   rv   zPbxArray.__init__c   s    +-


rw   rV   itemT.Union[PbxArrayItem, str]commentstrc                    t          |t                    r| j                            |           d S | j                            t          ||                     d S rq   )
isinstancePbxArrayItemrd   append)ru   r   r   s      rk   add_itemzPbxArray.add_itemf   sV    dL)) 	;Jd#####Jl499:::::rw   ofileT.TextIOindent_levelr\   c                X   |                     d           |dz  }| j        D ]b}|j        r1|                     |t          z  |j         d|j         dz              :|                     |t          z  |j         dz              c|dz  }|                     |t          z  dz              d S )Nz(
r    z,
z);
)writerd   r   INDENTvalueru   r   r   is       rk   r   zPbxArray.writel   s    E 	C 	CAy CL/QW2M2Mqy2M2M2MMNNNNL/QW///ABBBBL'&011111rw   Nrx   rV   )r   r   r   r   rR   ro   r   r   r   r\   rR   ro   )rz   r{   r|   rv   r   r   r}   rw   rk   r   r   b   sU        . . . .; ; ; ; ;	2 	2 	2 	2 	2 	2rw   r   c                      e Zd ZdddZdS )	r   rV   r   r   r   c                Z    || _         |rd|v r	|| _        d S d| d| _        d S || _        d S Nz/*/*  */)r   r   )ru   r   r   s      rk   rv   zPbxArrayItem.__init__x   sF    
 	#w&1W111"DLLLrw   Nr   )r   r   r   r   ry   r}   rw   rk   r   r   w   s-        # # # # # # #rw   r   c                      e Zd ZddZdd
ZdS )
PbxCommenttextr   c                V    t          |t                    sJ d|vsJ d| d| _        d S r   )r   r   r   )ru   r   s     rk   rv   zPbxComment.__init__   s<    $$$$$$4#$OOO			rw   r   r   r   r\   rR   ro   c                B    |                     d| j         d           d S )N
)r   r   )ru   r   r   s      rk   r   zPbxComment.write   s(    &&&&'''''rw   N)r   r   r   )rz   r{   r|   rv   r   r}   rw   rk   r   r      s<        $ $ $ $
( ( ( ( ( (rw   r   c                       e Zd ZdddZdd	Zd
S )PbxDictItemrV   keyr   r   $T.Union[PbxArray, PbxDict, str, int]r   c                    || _         t          |t                    r|                     |          | _        n|| _        |rd|v r	|| _        d S d| d| _        d S || _        d S r   )r   r   r   quote_valuer   r   )ru   r   r   r   s       rk   rv   zPbxDictItem.__init__   sv    eS!! 	))%00DJJDJ 	#w&1W111"DLLLrw   rR   c                z    d| d}|s|S t          d                              |          s|d         dk    r|S |S )N"z +@$<>/r   )set
isdisjoint)ru   r   quoteds      rk   r   zPbxDictItem.quote_value   sN    U 	My>>$$U++ 	uQx3Lrw   Nr   )r   r   r   r   r   r   )r   r   rR   r   )rz   r{   r|   rv   r   r}   rw   rk   r   r      sA        # # # # #	 	 	 	 	 	rw   r   c                  8    e Zd ZddZddd
ZddZddZddZdS )PbxDictrR   ro   c                :    t                      | _        g | _        d S rq   )r   keysrd   rt   s    rk   rv   zPbxDict.__init__   s     !$	?A


rw   rV   r   r   r   r   r   c                    || j         vsJ t          |||          }| j                             |           | j                            |           d S rq   )r   r   addrd   r   )ru   r   r   r   r   s        rk   r   zPbxDict.add_item   sV    $)####3w//	c
$rw   boolc                    || j         v S rq   )r   )ru   r   s     rk   has_itemzPbxDict.has_item   s    dirw   r   c                h    t          |t                    sJ | j                            |           d S rq   )r   r   rd   r   )ru   r   s     rk   add_commentzPbxDict.add_comment   s4    ':.....
'"""""rw   r   r   r   r\   c           
        |                     d           |dz  }| j        D ]g}t          |t                    r|                     ||           /t          |t                    rt          |j        t          t          f          rq|j        r9|                     |t          z  |j
         d|j         d|j         dz              |                     |t          z  |j
         d|j         dz              t          |j        t                    r}|j        r1|                     |t          z  |j
         d|j         dz              n(|                     |t          z  |j
         dz              |j                             ||           nt          |j        t                    r}|j        r1|                     |t          z  |j
         d|j         dz              n(|                     |t          z  |j
         dz              |j                             ||           t          |           t          |j
                   t          |j                   t          d          t          |           t          d          |dz  }|                     |t          z  dz              |d	k    r|                     d
           d S |                     d           d S )Nz{
r   z = r   z;
zmissing codezmissing code2}r   r   )r   rd   r   r   r   r   r   r\   r   r   r   r   r   printRuntimeErrorr   s       rk   r   zPbxDict.write   s   E 	4 	4A!Z(( 4|,,,,A{++ 4agSz22 7y UL$7QU:_:_qw:_:_QRQZ:_:_:_$_````L$7QU:S:Sqw:S:S:S$STTTT11 7y IL$7QU:S:SQY:S:S:S$STTTTL$7QU---$GHHHGMM%666622 
7y IL$7QU:S:SQY:S:S:S$STTTTL$7QU---$GHHHGMM%6666!HHH!%LLL!'NNN&~666a"?333L'#-...1KKKKrw   Nrx   r   )r   r   r   r   r   r   rR   ro   )r   r   rR   r   )r   r   rR   ro   r   )rz   r{   r|   rv   r   r   r   r   r}   rw   rk   r   r      s        B B B B                # # # #& & & & & &rw   r   c                  @    e Zd ZdZda fdZdbd	ZdcdZ ej        d          ddd            Z	dddZ
dedfdZdgdZdhdidZdjd!Zdbd"Zdbd#Zdbd$Zdbd%Zdbd&Zdbd'Zdbd(Zdbd)Zdbd*Zdbd+Zdbd,Zdbd-Zdbd.Zdbd/Zdbd0Zdbd1Zdbd2Zdbd3Z dbd4Z!dbd5Z"dbd6Z#dkd9Z$dkd:Z%dbd;Z&dkd<Z'dld?Z(dkd@Z)dkdAZ*dkdBZ+dkdCZ,dkdDZ-dE Z.dbdFZ/dbdGZ0dmdIZ1dndLZ2dkdMZ3dkdNZ4dkdOZ5dkdPZ6dkdQZ7dkdRZ8dkdSZ9dbdTZ:dkdUZ;dkdVZ<dkdWZ=dX Z>dbdYZ?dod[Z@d\ ZAdkd]ZBdpd_ZCdqd`ZD xZES )rXCodeBackendxcoder   T.Optional[build.Build]interpreterT.Optional[Interpreter]c                x   t                                          ||           | j        j        j        d                             dd          d d         | _        t          j        d| j        j        j	        
                    t          d                              | _        |                                 | _        |                                 | _        |                                 | _        |                                 | _        | j        g| _        |                                 | _        |                                 | _        |                                 | _        |                                 | _        |                                 | _        |                                 | _        |                                 | _        t5                      | _        i | _        | j        j        j        j        j         | _!        | j!        dk    rd| _!        tE                      \  | _#        | _$        i | _%        i | _&        d S )	Ndefault-rV      r   	buildtypeaarch64arm64)'superrv   environmentcoredata
lang_guidsreplaceproject_uidTcastoptstoreget_value_forr   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_idr   top_level_dictgenerator_outputsr   machineshostcpuarchrl   xcodeversion
objversionbuildfile_idsfileref_ids)ru   r   r   	__class__s      rk   rv   zXCodeBackend.__init__   s   ,,,+4?	JRRSVXZ[[\_]_\_`t'7'@'I'W'WXabmXnXn'o'opp $ KKMMkkmm $>*{{}}#{{}}!% $"&++--#';;== %ii!#J*38<	9	!!DI-E-G-G*4?   rw   rR   ro   c                    |dz   }t          |dd          5 }|                    d           |                    |d           d d d            n# 1 swxY w Y   t          j        ||           d S )Nz.tmpwzutf-8)encodingz// !$*UTF8*$!
r   )openr   osr   )ru   r   	ofilenametmpnamer   s        rk   write_pbxfilezXCodeBackend.write_pbxfile  s    f$'3111 	+UKK)***  ***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	
7I&&&&&s   ,AAAr   c                    t          t          j                                                                                  dd          d d         S )Nr   rV   r   )r   uuiduuid4upperr   rt   s    rk   r   zXCodeBackend.gen_id  s;    4:<<  &&((00b99#2#>>rw   N)maxsizetarget.T.Union[build.Target, build.CustomTargetIndex]c                    t           j                            |                                t	          j        d| j        j        j        	                    t          d                                        }|S )Nr   r   )r   pathr]   
get_subdirr   r   r   r   r   r   r   ru   r   dirnames      rk   get_target_dirzXCodeBackend.get_target_dir  su    ',,v0022AF5$BRB[BdBrBrs|  ~I  tJ  tJ  CK  CK  5L  5L  M  Mrw   c                    |                                 }t          j        t          j                            | j                                        |          d           |S )NTexist_ok)r   r   makedirsr   r]   r   get_build_dirr   s      rk   get_custom_target_output_dirz)XCodeBackend.get_custom_target_output_dir  sM    ##%%
BGLL!1!?!?!A!A7KKVZ[[[[rw   build.BuildTargetsourcemesonlib.FileOrString	targetdirT.Optional[str]c                H   | j         j        }| j        }|                                }t	          |t
          j                  r|j        }t          j	        
                    t          j	                            |                    d         }d| d| d| d| j         d| d}|S )Nr   zbuild/z.build//z.build/Objects-normal/r8   )r   project_namer   get_idr   r   Filefnamer   r   splitextbasenamer   )	ru   r   r  r  projectr   tnamestemobj_paths	            rk   object_filename_from_sourcez(XCodeBackend.object_filename_from_source  s     *)N	fhm,, 	"\Fw 0 0 8 899!<iGiiIiiiiUYU^iiaeiiirw   T.List[str]c           	         g }|j         D ]_}|                    t          j                            | j                                        |                     |                               `|S rq   )link_targetsr   r   r   r]   r   r  r   )ru   r   resultls       rk   determine_swift_dep_dirsz%XCodeBackend.determine_swift_dep_dirs)  sc     $ 	b 	bAMM"',,t'7'E'E'G'GI\I\]^I_I_``aaaarw   Fcapturer   
vslite_ctxT.Optional[T.Dict]c                h   |rt          d          |rt          d          |                                  | j                                        | _        | j                                        | _        |                                  | j        dk     r| 	                                 | 
                                 |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  t6          j                            | j                                        | j        j         dz             | _!        t7          j"        | j!        d           t6          j                            | j!        d          | _#        | $                    | j%                  }|&                    tO          d                     | (                    |           |&                    tO          d	                     |&                    tO          d
                     | )                    |           |&                    tO          d                     |&                    tO          d                     | *                    |           |&                    tO          d                     |&                    tO          d                     | j        dk     rY| +                    |           |&                    tO          d                     |&                    tO          d                     | ,                    |           |&                    tO          d                     |&                    tO          d                     | -                    |           |&                    tO          d                     |&                    tO          d                     | .                    |           |&                    tO          d                     |&                    tO          d                     | /                    |           |&                    tO          d                     |&                    tO          d                     | 0                    |           |&                    tO          d                     |&                    tO          d                     | 1                    |           |&                    tO          d                     |&                    tO          d                     | 2                    |           |&                    tO          d                     |&                    tO          d                     | 3                    |           |&                    tO          d                     |&                    tO          d                      | 4                    |           |&                    tO          d!                     |&                    tO          d"                     | 5                    |           |&                    tO          d#                     |&                    tO          d$                     | 6                    |           |&                    tO          d%                     | 7                    | j%                   | 8                    | j%        | j#                   | 9                                 d S )&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'rA   z
.xcodeprojTr   zproject.pbxprojz Begin PBXAggregateTarget sectionzEnd PBXAggregateTarget sectionzBegin PBXBuildFile sectionzEnd PBXBuildFile sectionzBegin PBXBuildRule sectionzEnd PBXBuildRule 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):r   serialize_testsr   get_build_targetsbuild_targetsget_custom_targetscustom_targetsgenerate_filemapr   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_native_target_build_rules_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   r   r   generate_pbx_aggregate_targetgenerate_pbx_build_filegenerate_pbx_build_rule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)ru   r  r  objects_dicts       rk   generatezXCodeBackend.generate0  s4    	n#$lmmm 	m#$klll!Z99;;"j;;==?R'')))%%'''--///113330022211333--///'')))++---'')))33555**,,,&&(((++---  """((***&&(((%%'''T%5%C%C%E%EtzG^amGmnn
DMD1111dm5FGG++D,?@@  ,N!O!OPPP**<888  ,L!M!MNNN  ,H!I!IJJJ$$\222  ,F!G!GHHH  ,H!I!IJJJ$$\222  ,F!G!GHHH  ,I!J!JKKK?R)),777$$Z0K%L%LMMM$$Z0U%V%VWWW..|<<<  ,O!P!PQQQ  ,L!M!MNNN((666  ,J!K!KLLL  ,S!T!TUUU//===  ,Q!R!RSSS  ,D!E!EFFF---  ,B!C!CDDD  ,K!L!LMMM''555  ,I!J!JKKK  ,F!G!GHHH!!,///  ,D!E!EFFF  ,T!U!UVVV++L999  ,R!S!STTT  ,P!Q!QRRR--l;;;  ,N!O!OPPP  ,O!P!PQQQ++L999  ,M!N!NOOO  ,P!Q!QRRR,,\:::  ,N!O!OPPP  ,O!P!PQQQ**<888  ,M!N!NOOOT01114.???  """""rw   r  c                    |                     d          d         }|dk    rd}t                              |                                          }|sd}|S )NrW   r&   r   zsourcecode.unknown)ra   XCODETYPEMAPgetlower)ru   r  	extension	xcodetypes       rk   get_xcodetypezXCodeBackend.get_xcodetype  sX    KK$$R(	I $$Y__%6%677	 	-,Irw   c                   i | _         i | _        | j                                        D ]\  }}|j        D ]b}t          |t          j                  rFt          j	        
                    |j        |j                  }|                                 | j         |<   c|j        D ]X}t          |t                    rAt          j	        
                    |j        |          }|                                 | j         |<   Y|j        D ]}t          |t          j                  rGt          j	        
                    |j        |j                  }|                                 | j         |<   ct          j	        
                    |j        |          }|                                 | j         |<   |                                 | j        |<   d S rq   )filemaptarget_filemapr#  rd   sourcesr   r   r  r   r   r]   subdirr  r   objectsr   extra_files)ru   nametr!   r    es         rk   r&  zXCodeBackend.generate_filemap  st    )//11 	6 	6GD!Y 4 4a// 4QXqw77A&*kkmmDLOY 4 4a%% 4QXq11A&*kkmmDLO] 4 4a// 4QXqw77A&*kkmmDLOOQXq11A&*kkmmDLOO(,D%%!	6 	6rw   c                F    | j         |                                 i| _        d S rq   )r   r   buildstylemaprt   s    rk   r'  z#XCodeBackend.generate_buildstylemap  s    "ndkkmm<rw   c                2   | j                                         D ]|\  }}i |_        |                                 |j        |<   |                                 |j        d<   |                                 |j        d<   |                                 |j        d<   }d S )N
Frameworks	ResourcesSources)r#  rd   buildphasemapr   )ru   r  r_  s      rk   r(  z%XCodeBackend.generate_build_phase_map  s    *0022 	7 	7HE1 AO%)[[]]AOE",0KKMMAOL)+/;;==AOK()-AOI&&	7 	7rw   c                    i | _         | j        D ]'}| j        |                                 i}|| j         |<   (| j        D ]'}| j        |                                 i}|| j         |<   (d S rq   )buildconfmapr#  r   r   r%  )ru   r_  bconfss      rk   r)  z-XCodeBackend.generate_build_configuration_map  s    # 	* 	*Andkkmm4F#)Da  $ 	* 	*Andkkmm4F#)Da  	* 	*rw   c                F    | j         |                                 i| _        d S rq   )r   r   project_configurationsrt   s    rk   r+  z0XCodeBackend.generate_project_configurations_map  s    '+~t{{}}&E###rw   c                F    | j         |                                 i| _        d S rq   )r   r   buildall_configurationsrt   s    rk   r,  z1XCodeBackend.generate_buildall_configurations_map  s    (,'F$$$rw   c                F    | j         |                                 i| _        d S rq   )r   r   test_configurationsrt   s    rk   r-  z-XCodeBackend.generate_test_configurations_map  s    $(NDKKMM#B   rw   c                    i | _         | j        D ]}|                                 | j         |<   | j        D ]}|                                 | j         |<   d S rq   )buildconflistmapr#  r   r%  ru   r_  s     rk   r*  z1XCodeBackend.generate_build_configurationlist_map  sh     "# 	5 	5A'+{{}}D!!$$$ 	5 	5A'+{{}}D!!$$	5 	5rw   c                `    i | _         | j        D ]}|                                 | j         |<   d S rq   )native_targetsr#  r   rs  s     rk   r.  z'XCodeBackend.generate_native_target_map  s>     # 	3 	3A%)[[]]D""	3 	3rw   c                    i | _         | j                                        D ]<\  }}i }|j        D ]#}|t          vr|                                 ||<   $|| j         |<   =d S rq   )build_rulesr#  rd   	compilersNEEDS_CUSTOM_RULESr   )ru   r^  r   	languageslanguages        rk   r1  z3XCodeBackend.generate_native_target_build_rules_map  s     .4466 	/ 	/LD&I", 4 4#555&*kkmm	(##%.DT""	/ 	/rw   c                   i | _         i | _        i | _        | j                                        D ]\  }}|                                 | j         |<   t          |t          j                  s<| 	                    |          \  }}}|D ]:}|                                 | j        |<   |                                 | j        |<   ;d S rq   )
shell_targetscustom_target_output_buildfilecustom_target_output_filerefr%  rd   r   r   r   CustomTargeteval_custom_target_command)ru   r  r_  srcs
ofilenamescmdr    s          rk   r0  z'XCodeBackend.generate_custom_target_map  s    .0+,.)+1133 	E 	EHE1(,Du%a!344 &*&E&Ea&H&H#T:s E E9=3A67;{{}}1!44E	E 	Erw   c                   i | _         i | _        | j                                        D ]I\  }}d}|j        D ]:}t          |t          j                  s|                     ||||           |dz  };J| j	                                        D ]I\  }}d}|j
        D ]:}t          |t          j                  s|                     ||||           |dz  };Jd S Nr   r   )generator_fileref_idsgenerator_buildfile_idsr#  rd   	generatedr   r   GeneratedListgen_single_target_mapr%  rZ  )ru   r  r_  generator_idgenlists        rk   r2  z*XCodeBackend.generate_generator_target_map  s    &("')$*0022 	" 	"HE1L; " "!'5+>?? **7E1lKKK!	" +1133 	" 	"HE1L9 " "!'5+>?? **7E1lKKK!	"	" 	"rw   c                   ||f}|| j         vsJ |                                 | j         |<   g }|                                D ]}|                    |          D ]}t          j                            |                     |          |          }	|                    t          j                            | j	        
                                |	                     || j        vsJ || j        |<   g }
g }t          t          |                    D ]P}|
                    |                                            |                    |                                            Q|
| j        |<   || j        |<   d S rq   )r}  r   
get_inputsget_outputs_forr   r   r]   get_target_private_dirr   r   r  r   rangelenr  r  )ru   r  r  r_  r  k	ofile_absr   o_baser    r   r   s               rk   r  z"XCodeBackend.gen_single_target_map  s{   L!***** $1	##%% 	T 	TA!11!44 T TGLL!<!<Q!?!?HH  d.>.L.L.N.NPQ!R!RSSSST .....$-q!s9~~&& 	. 	.A  ///t{{}}----*7$Q'(3"1%%%rw   c                J   i | _         i | _        | j                                        D ]z}|                                D ]c}|j        dk    rV|                                rB|j        D ]:}|                                 | j         |<   |                                 | j        |<   ;d{d S )Nappleframeworks)	native_frameworksnative_frameworks_filerefr#  valuesget_external_depsr^  found
frameworksr   )ru   r_  depfs       rk   r/  z+XCodeBackend.generate_native_frameworks_map  s    !#)+&#**,, 	J 	JA**,, J J8000SYY[[0 ^ J J48KKMM.q1<@KKMM6q99	J	J 	Jrw   c                   i | _         | j                                        D ]\  }}|j        D ]}t	          |t
          j                  r&||j                                        f}|| j         v rAn!||                                f}|| j         vsJ | 	                                | j         |<   | j
                                        D ].\  }}|}|| j         vsJ | 	                                | j         |<   /d S rq   )target_dependency_mapr#  rd   r  r   r   CustomTargetIndexr   get_basenamer   r%  )ru   r  r_  r   r  s        rk   r4  z+XCodeBackend.generate_target_dependency_map  s(   %'"*0022 		> 		>HE1. > >fe&=>> ? : : < <=AD666  7  3 3 5 56AD$>>>>>04*1--> +1133 	: 	:HE1AD66666,0KKMMD&q))	: 	:rw   c                    i | _         i | _        | j        D ]}|                                 | j         |<   | j        D ]}|                                 | j        |<   d S rq   )pbx_dep_mappbx_custom_dep_mapr#  r   r%  rs  s     rk   r5  z XCodeBackend.generate_pbxdep_map'  sp    "$# 	0 	0A"&++--DQ$ 	7 	7A)-D#A&&	7 	7rw   c                `    i | _         | j        D ]}|                                 | j         |<   d S rq   )containerproxy_mapr#  r   rs  s     rk   r6  z(XCodeBackend.generate_containerproxy_map/  s>    "$# 	7 	7A)-D#A&&	7 	7rw   c                n    |                      | j                   |                      | j                   d S rq   )generate_target_file_maps_implr#  r%  rt   s    rk   r7  z&XCodeBackend.generate_target_file_maps4  s6    ++D,>???++D,?@@@@@rw   c                   |                                 D ]\  }}|j        D ]}t          |t          j                  r*t
          j                            |j        |j	                  }t          |t                    s\||f}|| j        vsJ |                                 | j        |<   || j        vsJ |                                 | j        |<   t          |d          s|j        D ]}t          |t           j                  rt          |t          j                  r*t
          j                            |j        |j	                  }t          |t                    rxt
          j                            |j        |          }||f}|| j        vsJ |                                 | j        |<   || j        vsJ |                                 | j        |<   t%          dt          |          z             |j        D ]}t          |t          j                  r*t
          j                            |j        |j	                  }t          |t                    rwt
          j                            |j        |          }||f}|| j        vsJ |                                 | j        |<   || j        vsJ |                                 | j        |<   Ӑd S )Nr\  zUnknown input type )rd   rZ  r   r   r  r   r   r]   r[  r  r   r   r   r   hasattrr\  r   ExtractedObjectsr   r]  )ru   rs   r  r_  r!   r  r    r`  s           rk   r  z+XCodeBackend.generate_target_file_maps_impl8  s    %	8 %	8HE1Y 	4 	4a// 8QXqw77A!!S)) AJ 22222(,"1% 00000&*kkmm ##1i(( Y G Ga!788 a// 8QXqw77Aa%% GQXq11A
AD$66666,0KKMMD&q)D$44444*.++--D$Q''&'<s1vv'EFFF] 	8 	8a// 8QXqw77Aa%% 8QXq11A
AD$66666,0KKMMD&q)D$44444*.++--D$Q'	89%	8 %	8rw   c                    | j                                         D ]Q}t          |t                    sJ |                                 | j        |<   |                                 | j        |<   Rd S rq   )r   get_build_def_filesr   r   r   r   r   )ru   	buildfiles     rk   r8  z%XCodeBackend.generate_build_file_maps`  sm    )==?? 	8 	8Ii-----,0KKMMDy)*.++--DY''	8 	8rw   c                `    i | _         | j        D ]}|                                 | j         |<   d S rq   )source_phaser#  r   rs  s     rk   r3  z&XCodeBackend.generate_source_phase_mapf  s>    # 	1 	1A#';;==Da  	1 	1rw   rM  r   c                	   i | _         |                                 | _        g }g }|                                                                 D ]\  }}t          |t          j                  r3|                    | j	        |
                                                    Rt          |t          j                  r2|                    | j        |
                                                    g }|                    | j        d| j        g | j        g|z   |z   f           |                    | j        d| j        | j        g| j        | j        gf           |                    | j        d| j        | j        gg f           | j                                                                        D ]\  }}|                                 }|| j         |<   g }| j        g}	d}
|j        D ]}t          |t          j                  r3|	                    | j	        |
                                                    Ot          |t          j                  r2|	                    | j        |
                                                    |j        D ]}t          |t          j                  rd|                    | j        ||
f                    |j        D ]4}|	                    | j	        |
                                                    5|
dz  }
t          |t          j                  r=| j        |j        
                                         }||	vr|	                    |           |                    | j        |                    |                    ||| j        |         ||	f           t?          |tA          j!        d                    }|D ])}tE                      }|d         }|d         }|d         }|d	         }	|#                    d
d           |#                    d|d| d           tI                      }|#                    d|           |D ]}|#                    |d           tI                      }|#                    d|           |	D ]}|#                    |d           |#                    d|           |#                    d|           |#                    |d         ||           +d S )N	ALL_BUILD	RUN_TESTS
REGENERATEr   r   r   r         isaPBXAggregateTargetbuildConfigurationList1Build configuration list for PBXAggregateTarget "r   buildPhasesShellScriptdependenciesPBXTargetDependencyr^  productName)%custom_aggregate_targetsr   build_all_tdep_idget_build_by_default_targetsrd   r   r   r  r   r  r  r   r  r   r   r   r   r   r   r   r   r   r$  r  rZ  r  r}  dependsr  r   rr  sortedoperator
itemgetterr   r   r   )ru   rM  target_dependenciescustom_target_dependenciesr  r_  aggregated_targetsct_idbuild_phasesr  r  dr!   source_target_idsorted_aggregated_targetsagt_dictr^  buildconf_idbp_arrbpdep_arrtds                         rk   r<  z*XCodeBackend.generate_pbx_aggregate_targetk  s<   (*%!% %'"99;;AACC 	I 	IHE1!U/00 I*11$2I!((**2UVVVVAu011 I#**4+;AHHJJ+GHHH!!4;#.#'#8#%$($<#=@S#SVp#p	#r 	s 	s 	s
 	!!4<#.#'#9$($8#9$($<d>T#U	#W 	X 	X 	X
 	!!4=#/#'#:$($9#:#%	#' 	( 	( 	(
 
5577==?? 	p 	pHE1KKMME38D)%0L 45LL^ F Fa!344 F ''(?

(KLLLL5#455 F ''(8(DEEEY 	> 	>a!455 > ''(:E<;P(QRRRY Q Q$++D,CAHHJJ,OPPPP A%LL5#9:: >'+'78I8I'J$'|;;$++,<=== 25 9:::%%ueT5J55QS_am&noooo %++=8CVWXCYCY$Z$Z$Z!* 	8 	8AyyHQ4DQ4LQ4LQ4Le%9:::6  GBz~  GB  GB  GB  C  C  CZZFmV444" 3 3M2222jjGng666" < <  %:;;;;fd+++mT222!!!A$$7777%	8 	8rw   c           	     	   | j                                         D ]\  }}|                                D ]}|j        dk    r|                                r|j        D ]x}t                      }| j        |         }||j        vr|	                    ||| d           |	                    dd           |	                    d| j
        |         |           y|j        D ]H}d}	t          |t          j                  r3|j        rd}	t           j                            |j        |j                  }t          |t*                    sht                      }
||f}| j        |         }| j        |         }|	r8t           j                            | j                                        |          }n7t           j                            | j                                        |          }|
	                    dd           |
	                    d||           |	                    ||
           J|j        D ]]}t          |t8          j                  rt          |t          j                  r+t           j                            |j        |j                  }n:t          |t*                    r%t           j                            |j        |          }| j        ||f         }||f}| j        |         }|| j        vsJ || j        |<   t           j                            | j                                        |          }|}t                      }|	                    |||           |	                    dd           |	                    d||           _d}|j        D ]9}t          |t8          j                   s| !                    |||           |d	z  }:| j"                                        D ]\  }}t          |t8          j#                  s | $                    |          \  }}}|D ]m}t                      }|	                    | j%        |         |d
| d           |	                    dd           |	                    d| j&        |                    nd}|j        D ]9}t          |t8          j                   s| !                    |||           |d	z  }:d S )Nr  .framework in Frameworksr  PBXBuildFilefileRefFTr   r   r   r   )'r#  rd   r  r^  r  r  r   r  r   r   r  rZ  r   r   r  is_builtr   r   r]   r[  r  r   r   r   r   r  get_source_dirr\  r   r  rX  r  r  create_generator_shellphaser%  r  r  r~  r  )ru   rM  r  r_  r  r  fw_dictfwkeyr!   in_build_dirsdictr  idvalfilereffullpathr    	fullpath2o_dictr  r2   r  r  r  custom_dicts                           rk   r=  z$XCodeBackend.generate_pbx_build_file  s   *0022 ;	" ;	"HE1**,, Z Z8000SYY[[0 ^ Z Z"))) $ 6q 9 (999(11%QB`B`B`aaa((???((D4RST4UWXYYYYY 4 4$a// 8z ,'+QXqw77A!!S)) 		AJ*1-*1- R!w||D,<,J,J,L,LaPPHH!w||D,<,K,K,M,MqQQHun555y'8<<<%%eU3333Y ? ?a!788  a// 2QXqw77AA3'' 2QXq11A*E1:6AJ*1-,,,,"'Q7<<(8(G(G(I(I1MM$	 %%eVX>>>~666	7I>>>>L[ " "!!U%899 00ulSSS!	" +1133 	" 	"HE1a!344 &*&E&Ea&H&H#T:s V V%ii%%d&I!&Lk[gab[g[g[ghhh$$UN;;;$$Y0QRS0TUUUULY " "!!U%899 00ulSSS!	"	" 	"rw   c                R   | j         ||f         }| j        ||f         }t          |          t          |          k    sJ t          ||          D ]U\  }}t	                      }|                    ||           |                    dd           |                    d|           Vd S )Nr  r  r  )r  r  r  zipr   r   )	ru   rM  r  r  file_idsref_idsfile_oref_idodicts	            rk   r  z(XCodeBackend.create_generator_shellphase  s    /0EF,e\-BC7||s8}},,,,!(G44 	. 	.NFFIIE!!&%000NN5.111NN9f----		. 	.rw   c                Z   | j                                         D ]\  }}t                      }|                    |||           |                    dd           t                      }|                    d|           |                    dd           |                    d|           d S )Nr  PBXBuildStylebuildSettingsCOPY_PHASE_STRIPr4   r^  )rb  rd   r   r   )ru   rM  r^  r  	styledictsettings_dicts         rk   r?  z%XCodeBackend.generate_pbx_build_style  s    -3355 	- 	-KD%		I!!%D999uo666#IIM>>>""#5t<<<vt,,,,	- 	-rw   argsr
   c           	         g }|D ];}|                     |                    dt          d          dz                        <d                    |          }d| dS )Nr   \   r   z"#!/bin/sh\nz\n")r   r   chrr]   )ru   r  
quoted_cmdr   r  s        rk   to_shell_scriptzXCodeBackend.to_shell_script  sg    
 	= 	=AaiiSWWs];;<<<<hhz""*****rw   c                "   | j                                         D ]\  }}| j        |         }|                                D ]\  }}|j        |         }t	                      }|                    dd           |                    dd           |                                dk    r|                    dd           |                    dt          |                    t                      }	|                    d	|	           |                    d
d           t                      }
|
                    d           |                    d|
           t          |          }||
                                z  }|                                dk    r||                     ||ddd           z  }n||                     ||ddddg          z  }|                    d|                     |                     |                    ||d           ̐d S )Nr  PBXBuildRulecompilerSpecz com.apple.compilers.proxy.scriptyasmdependencyFilez($(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).dfileType
inputFiles
isEditabler-   z($(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).ooutputFilesz"$SCRIPT_OUTPUT_FILE_0"z"$SCRIPT_INPUT_FILE")outputinputdepfilezM"$(dirname "$SCRIPT_OUTPUT_FILE_0")/$(basename "$SCRIPT_OUTPUT_FILE_0" .o).d"z$OTHER_INPUT_FILE_FLAGS)r  r  r  extrasscript)rw  rd   r#  rx  r   r   r  ry  r   r
   get_exelistcompiler_to_generator_argsr  )ru   rM  r^  rz  r   r{  r  compiler	buildrule
inputfilesoutputfilescommandss               rk   r>  z$XCodeBackend.generate_pbx_build_rule  sK   #/5577 %	H %	HOD)"&"4T":F#,??#4#4 #H #H%%+%5h%?#II	""5.999"">3UVVV??$$..&&'79cddd"":/A(/KLLL%ZZ
""<<<<""<555&jj$$%OPPP""=+>>> (11H00222??$$.. ? ?Yr  {Q  [_ ?  !`  !`  `HH ? ?@HG`F\ IXHaGb !@ !d !d dH ""8T-A-A(-K-KLLL%%eYGGGGG#H%	H %	Hrw   c                x   | j         D ]}t                      }|                    | j        |         |d           |                    dd           |                    d| j        d           |                    dd           |                    d| j        |                    |                    d|           d S )	NPBXContainerItemProxyr  containerPortalProject object	proxyTyper.   remoteGlobalIDString
remoteInfo)r#  r   r   r  r   ru  )ru   rM  r_  
proxy_dicts       rk   r@  z.XCodeBackend.generate_pbx_container_item_proxyF  s    # 	1 	1A J!!$"9!"<jJabbb'>??? 143CEUVVVS111 68KA8NOOOa0000	1 	1rw   c           	     X   | j                                         D ]\  }}|                                D ]}|j        dk    r|                                r|j        D ]}t                      }| j        |         }|                    |          r3|	                    |||           |	                    dd           |	                    dd           |	                    d| d           |	                    dd	| d           |	                    d
d           |j
        D ]}d}	t          |t          j                  r3|j        rd}	t          j                            |j        |j                  }t          |t(                    sh| j        ||f         }
t          j                            | j                                        |          }t                      }|                     |          }t          j                            |          }|}|	                    |
||           |	                    dd           |	                    d|           |	                    dd           |	rD|	                    d|           |	                    d|           |	                    d
d           |	                    d|           |	                    d|           |	                    d
d           d}|j        D ]}t          |t6          j                  s| j        ||f         }| j        ||f         }t?          |          t?          |          k    sJ tA          ||          D ]\  }}t                      }t          j                            |          }|	                    |||           |                     |          }t          j!        || j                                                  }|	                    dd           |	                    d|           |	                    dd           |	                    d|           |	                    d|           |	                    d
d           |dz  }|j"        D ]}t          |t6          j#                  rt          |t          j                  ro|$                    | j                                        | j        %                                          }t          j                            |j        |j                  }n\t          j                            |j        |          }t          j                            | j                                        |          }| j        ||f         }
t          j!        || j                                                  }t                      }t          j                            |          }|	                    |
||           |	                    dd           |	                    d|                     |                     |	                    dd           |	                    d|           |	                    d|           |	                    d
d           |j&        D ]|}t          |t          j                  r+t          j                            |j        |j                  }n%t          j                            |j        |          }| j        ||f         }
t          j                            | j                                        |          }t                      }|                     |          }t          j                            |          }|}|	                    |
||           |	                    dd           |	                    d|           |	                    d|           |	                    d|           |	                    d
d           ~| j'                                        D ]9\  }}
t                      }|	                    |
||           | j         |         }|(                                }d}t          |t6          j)                  rd}|}n^t          |t6          j*                  r|                     d          }|}n,|                     |          }d|(                                z  }|	                    dd           |	                    d|           |	                    d|           |	                    d|           |	                    d
d           ;| j+                                        D ]\  }}t          |t6          j,                  s!| -                    |          \  }} }!|j
        D ]N}t          |t          j                  r+t          j                            |j        |j                  }n<t          |t(                    r&t          j                            |j        |          }nt                      }"|                     |          }|"	                    dd           |"	                    d|           |"	                    d|           |"	                    d|           |"	                    dd           |"	                    d
d           |	                    | j        ||f         |"           P| D ]}t                      }"|                     |          }|"	                    dd           |"	                    d|           |"	                    d|           |"	                    dt          j                            | j.        |                     |"	                    dd           |"	                    d
d           |	                    | j/        |         |"           | j0        1                                D ]}#t          j        2                    |#          d         }$t                      }%|                     |#          }|%	                    dd           |%	                    d|           |%	                    d|$           |%	                    d|#           |%	                    dd           |%	                    d
d           |	                    | j        |#         |%           d S )Nr  r  PBXFileReferencelastKnownFileTypezwrapper.frameworkr^  z
.frameworkr   zSystem/Library/Frameworks/
sourceTreeSDKROOTFTexplicitFileTypefileEncoding4
BUILD_ROOTSOURCE_ROOTr   r   zcompiled.mach-o.executablezdummy.dylibz"%s"refTypeBUILT_PRODUCTS_DIR)3r#  rd   r  r^  r  r  r   r  r   r   rZ  r   r   r  r  r   r   r]   r[  r  r   r   r   r  rV  r  r  r   r  r   r  r  r  relpathr\  r  absolute_pathr  r]  rY  get_filename
ExecutableSharedLibraryr%  r  r  src_to_buildr  r   r  ra   )&ru   rM  r  r_  r  r  r  framework_filerefr!   r  r  r  src_dictrU  r^  r   r  r2   outputsr  r    r  r  rel_namer  r`  e_dicttarget_dictr  reftypetypestrr  r  r  r  r  r  buildfile_dicts&                                         rk   rA  z(XCodeBackend.generate_pbx_file_referenceP  sb   *0022 g	= g	=HE1**,, B B8000SYY[[0 ^ 
B 
B"))),0,J1,M)'001BCC %$$--.?!LLL((0BCCC(()<>QRRR((A1A1A1ABBB((1[a1[1[1[\\\((yAAAAY C C$a// 8z ,'+QXqw77A!!S)) (%47<<(8(G(G(I(I1MM"99 ..q11	w''**%%eXx@@@!!%);<<<!!"4i@@@!!.#666 	C%%fd333 %%fd333%%lLAAAA%%fd333%%fd333%%lMBBBBL[ " "!!U%899 0%1FG4UL5HI7||s7||3333!$Wg!6!6 @ @IAv#IIE7++A..D ))&%;;; $ 2 21 5 5I'/43C3R3R3T3TUUHNN5*<===NN#5yAAANN>3777NN64000NN68444NN<????!Y = =a!788 a// R t/?/N/N/P/PRVRbRpRpRrRrssHQXqw77AAQXq11A!w||D,<,K,K,M,MqQQH(%4#+Hd6F6U6U6W6WXX w''**%%eVX>>>'9::: 2D4F4Fq4I4IJJJ444---111m<<<<] = =a// 2QXqw77AAQXq11A(%47<<(8(G(G(I(I1MM  ..q11	w''**%%eVX>>>'9::: 2I>>>------m<<<<!=" !/5577 	E 	ELE5!))K!!%e<<<"5)ANN$$EG!U-.. 16Au233 1,,];;,,U33 0 00  (:;;;  !3W===  ...  G444  /CDDDD+1133 	Y 	YHE1a!344 &*&E&Ea&H&H#T:sY Q Qa// QXqw77AA3'' QXq11AA%ii,,Q//$$U,>???$$%7AAA$$VQ///$$VQ///$$Y222$$\=AAA%%d&6qz&BKPPPP 	Y 	Y%ii,,Q//$$U,>???$$%7AAA$$VQ///$$VRW\\$:KQ-O-OPPP$$Y222$$\=AAA%%d&G&JKXXXX	Y )==?? 
	O 
	OIw}}Y//2H$YYN((33G##E+=>>>##$6@@@##FH555##FI666##Iq111##L-@@@!!$"29"=~NNNN
	O 
	Orw   c                2   | j                                         D ]}t                      }|                    |j        d         |d           |                    dd           |                    dd           t                      }|                    d|           |                                D ]O}|j        dk    rB|                                r.|j	        D ]&}|                    | j
        |         | d           'P|                    d	d
           d S )Nrd  r  PBXFrameworksBuildPhasebuildActionMaskfilesr  r  "runOnlyForDeploymentPostprocessingr   )r#  r  r   r   rg  r   r  r^  r  r  r  )ru   rM  r_  bt_dict	file_listr  r  s          rk   rB  z/XCodeBackend.generate_pbx_frameworks_buildphase  s3   #**,, 	F 	FAiiG!!!/,"?,WWWU$=>>>.
;;; 

IWi000**,, f f8000SYY[[0 ^ f f!**4+A!+DFdFdFdeeeeA1EEEE	F 	Frw   c                l   i }i }| j         D ]0}|                                 ||<   |                                 ||<   1| j        D ]0}|                                 ||<   |                                 ||<   1|                                 }|                                 }|                                 }|                                 }t                      }	|                    | j        |	           |	                    dd           t                      }
|	                    d|
           |
                    |d           |
                    |d           |
                    |d           |
                    |d           |	                    dd	           |                     ||           t                      }|                    ||d           |                    dd           t                      }|                    d|           |                    d
d           |                    dd	           t                      }|                    ||d           |                    dd           t                      }|                    d|           | j                                         D ]c}|	                                D ]L}|j
        dk    r?|                                r+|j        D ]#}|                    | j        |         |           $Md|                    d
d           |                    dd	           | j                                        D ]$\  }}t                      }|                    ||         ||           |                    dd           t                      }|                    d|           |                    ||         d           |j        r&|                    d
|j         d|j
                    n|                    d
|j
                   |                    dd	           t                      }|                    ||         |d           |                    dd           t                      }|                    d|           |j        D ]}t#          |t$          j                  r+t(          j                            |j        |j                  }n<t#          |t2                    r&t(          j                            |j        |          }n|                    | j        ||f         |           |                    d
d           |                    dd	           &t                      }|                    ||d           |                    dd           t                      }|                    d|           | j         D ]#}|                    | j        |         |           $|                    d
d           |                    dd	           d S )Nr  PBXGroupchildrenzProject treere  Productsrd  r  <group>r^  r  Source filesu    • )r#  r   r%  r   r   r   r   add_projecttreer  r  r^  r  r  r  rd   
subprojectrZ  r   r   r  r   r   r]   r[  r  r   r   rY  )ru   rM  groupmaptarget_src_mapr_  projecttree_idresources_idproducts_idframeworks_id	main_dictmain_childrenresource_dictresource_childrenframeworks_dictframeworks_childrenr  r  r  r1  target_childrensource_files_dictsource_file_childrenr!   product_dictproduct_childrens                            rk   rC  zXCodeBackend.generate_pbx_group  s   # 	. 	.A++--HQK $N1$ 	. 	.A++--HQK $N1{{}}kkmmII	d/;;;5*--- 

:}555~~>>>|[999{J777}l;;;<333\>:::		lM;GGGuj111$JJz+<===v{333|Y777!))m_lKKK  
333&jj  -@AAA #**,, 	[ 	[A**,, [ [8000SYY[[0 ^ [ [+44T5STU5VXYZZZZ[
 	  666  y999+1133 	@ 	@HE1!))K!!(5/;FFF  
333&jjO  _===$$^E%:NKKK| 5$$V-K-K16-K-KLLLL$$VQV444  y999 '		!!."79JN[[[&&uj999#+:: &&z3GHHHY O Oa// QXqw77AA3'' QXq11AA$--d.>qz.JANNNN&&v~>>>&&|Y???? yyk<DDDeZ000#::j*:;;;# 	A 	AA%%d&9!&<a@@@@fj111lI66666rw   c                   |                                 }|                                 }t                      }|                    |||           |                    dd           t	                      }|                    d|           |                    d| d           |                    dd           t                      }|j        D ]}t          |t          j                  r+t          j
                            |j        |j                  }n<t          |t                    r&t          j
                            |j        |          }n|                    | j        ||f         |           |j        D ]}	t          |	t"          j                  rt          |	t          j                  r+t          j
                            |	j        |	j                  }	n%t          j
                            |j        |	          }	|                    | j        ||	f         |	           |j        D ]}
t          |
t          j                  r+t          j
                            |
j        |
j                  }
n<t          |
t                    r&t          j
                            |j        |
          }
n|                    | j        ||
f         |
           |                    dd           |                    dd           |S )	Nr  r>  r?  r^  u
    · targetr  rA  rB  )r  r   r   r   r   rZ  r   r   r  r   r   r]   r[  r  r   r   r\  r   r  r]  )ru   rM  r_  tidgroup_idr1  rQ  rR  r!   r    r`  s              rk   write_group_target_entryz%XCodeBackend.write_group_target_entry`  s   hhjj;;==iihS999UJ///"**Z999V%5%5%5666\9555#II 	D 	DA!X]++ GLL1733As## GLL1--$$T%5sAh%?CCCC 	D 	DA!U344 !X]++ .GLL1733GLL1--$$T%5sAh%?CCCC 	D 	DA!X]++ GLL1733As## GLL1--$$T%5sAh%?CCCC""6>:::""<;;;rw   c                t   t                      }|                    ||d           |                    dd           t                      }|                    d|           |                    dd           |                    dd           |                                 }|                     |||d	           d S )
NzRoot of project treer  r>  r?  r^  zProject rootr  rA  rV   )r   r   r   generate_project_tree
write_tree)ru   rM  rG  	root_dictrQ  project_trees         rk   rC  zXCodeBackend.add_projecttree  s    II	ni9OPPP5*---"**:7776>222<3331133lORHHHHHrw   c           
        |j                                         D ]\  }}t                      }t                      }|                                 }	|                    |	|           |                    |	           |                    dd           |                    d|           |                    d|           |                    dd           |                     |||t          j        	                    ||                     |j
        D ]-}
|                     ||
          }|                    |           .t          j        	                    |d          t          j        	                    |d          t          j        	                    |d	          g}|D ]4}| j                            |d           }|r|                    |           5d S )
Nr  r>  r?  r^  r  rA  zmeson.buildzmeson.optionszmeson_options.txt)rr   rd   r   r   r   r   r\  r   r   r]   rs   rY  r   rR  )ru   rM  	tree_nodechildren_arraycurrent_subdirsubdir_namesubdir_nodesubdir_dictsubdir_children	subdir_idr   rX  
potentialsbfr   s                  rk   r\  zXCodeBackend.write_tree  s   (1(9(?(?(A(A 
	s 
	s$K!))K&jjOI!!)[999##I...  
333  _===  555  y999OOL+UcepHqHqrrrr' 	. 	.F44\6JJH##H----gll>=AAgll>?CCgll>3FGGI
  	+ 	+B $$R..A +''***	+ 	+rw   rn   c                    t                      }| j                                        D ]\  }}|                     ||           |S rq   )rn   r#  rd   add_target_to_tree)ru   	tree_infor  r_  s       rk   r[  z"XCodeBackend.generate_project_tree  sL    !OO	*0022 	2 	2HE1##Iq1111rw   	tree_rootr_  c                    |}|j                             d          }|D ]1}|s||j        vrt                      |j        |<   |j        |         }2|j                            |           d S )Nr  )r[  ra   rr   rn   rs   r   )ru   rm  r_  current_nodepath_segmentsr!   s         rk   rk  zXCodeBackend.add_target_to_tree  s     s++ 	3 	3A ,,,*7//$Q''/2LL##A&&&&&rw   c           	     	   | j                                         D ]\  }}t                      }| j        |         }|                    |||           |                    dd           |                    d| j        |         d| d           t                      }|                    d|           d}|j        D ]J}t          |t          j
                  r.|                    | j        ||f         d| d	|            |d
z  }K|j                                        D ]\  }	}
|                    |
|	 d           t                      }| j        |                                         D ]\  }}|                    ||            |                    d|           t                      }|                    d|           |                    | j                   | j        |         j        D ]}t          |t          j                  r9|                    | j        |                                         |j                   Ut          |t          j                  rC|                    | j        |j                                                 |j        j                   | j        |                                         }|                    |d           |j        D ]X}t          |t          j                  r<|j                                        }| j        |         }|                    |d           Yd}|j        D ]}t          |t          j                  r9|                    | j        |                                         |j                   n\t          |t          j                  rB|                    | j        |j                                                 |j        j                   |d
z  }|                    d|           |                    d|           |                    d| j        |         |           t          |t          j                  rd}nLt          |t          j                  rd}n/t          |t          j                  rd}nt;          d|z            |                    dd| d           d S )Nr  PBXNativeTargetr  .Build configuration list for PBXNativeTarget "r   r  r   
Generator r  r   z yyy
buildRulesr  r  r^  r  productReferencezcom.apple.product-type.toolz%com.apple.product-type.library.staticz&com.apple.product-type.library.dynamiczUnknown target type for %sproductType)ru  rd   r   r#  r   rr  r   r  r   r   r  r}  rg  rw  r   r  r  r  r  r^  r  r   r  r\  r  rY  r)  StaticLibraryr*  r   )ru   rM  r  r  ntarget_dictr_  buildphases_arrayr  r2   bpnamebpvalrw  r{  build_rule_idval	dep_arrayltr    r  r3  s                      rk   rD  z'XCodeBackend.generate_pbx_native_target  s    /5577 >	A >	ALE5"99L"5)A!!%u===!!%):;;;!!":D<QRW<X  [T  LQ  [T  [T  [T  U  U  U (

!!-1BCCCL[ & & a!455 &%..t/A5,BW/XZ}gsZ}Z}v{Z}Z}~~~ A%L!"!6!6!8!8 C C!**5V///BBBB"**K.2.>u.E.K.K.M.M F F**$$%5(}EEEE!!,<<< 

I!!.)<<<t7888 (/< 	E 	E b%"455 E&&t'>ryy{{'KRWUUUUE$;<< E&&t'>ry?O?O?Q?Q'RTVT]Tbcccc ,RYY[[9E&&u.CDDDDY E Ea!788 E'(x'8'8$ ,-=>E&&u.CDDDL[ " "a!344 b&&t'>qxxzz'JAFSSSS5#:;; b&&t'>qx?P?P'QSTS[S`aaa!!!&%000!!-777!!"4d6I%6PRWXXX!U-.. K7Au233 KAAu233 KB$%AE%IJJJ!!-W@@@@}>	A >	Arw   c                   t                      }|                    | j        |d           |                    dd           t                      }|                    d|           |                    dd           |                    d| j        d| j        j         d	           |                    d
t                                 | j        dk     rYt                      }|                    d|           | j        	                                D ]\  }}|                    ||           |                    d| j
                   |                    dd           |                    d| j                   |                    d| j                                                   |                    dd           t                      }|                    d|           |                    | j        d           |                    | j        d           |                    | j        d           | j        D ]#}|                    | j        |         |           $| j        D ]#}|                    | j        |         |           $d S )Nr  r  
PBXProject
attributes!BuildIndependentTargetsInParallelr3   r  )Build configuration list for PBXProject "r   r  rA   buildStylescompatibilityVersionhasScannedForEncodingsr   	mainGroupprojectDirPathprojectRootrV   rs   r  r  r  )r   r   r   r   r   r  r   r   rb  rd   r   r   r   r  r   r   r   r#  ru  r%  r  )	ru   rM  project_dict	attr_dict	style_arrr^  r  targets_arrr_  s	            rk   rE  z!XCodeBackend.generate_pbx_project  s   yyd.>NOOOe\222II	lI666>FFF68M  PV{  |F  |S  PV  PV  PV  	W  	W  	Wowyy999?R 

I!!-;;;#17799 0 0e""5$////4d6GHHH6:::k4+<===.0@0O0O0Q0QRRRmR000jji555T[+666T\;777T]L999# 	< 	<A  !4Q!7;;;;$ 	F 	FA  !>q!A1EEEE	F 	Frw   c                    |                      |           |                     |           |                     |           |                     |           d S rq   )generate_test_shell_build_phase generate_regen_shell_build_phase)generate_custom_target_shell_build_phases,generate_generator_target_shell_build_phases)ru   rM  s     rk   rF  z+XCodeBackend.generate_pbx_shell_build_phase  sX    ,,\:::--l;;;66|DDD99,GGGGGrw   c                   t                      }|                    | j        |d           |                    dd           |                    dd           |                    dt                                 |                    dt                                 |                    dt                                 |                    d	d
           |                    dd           t	          j                    ddd| j                                        gz   }d                    d |D                       }|                    d|           |                    dd
           d S )Nr  r  PBXShellScriptBuildPhaser7  r8  r9  
inputPathsoutputPathsr:  r   	shellPath/bin/shtestz--no-rebuildz-Cr   c                    g | ]}d |z  S '%s'r}   .0r   s     rk   
<listcomp>z@XCodeBackend.generate_test_shell_build_phase.<locals>.<listcomp>+      333!6A:333rw   shellScriptshowEnvVarsInLog)	r   r   r   r   r   get_meson_commandr   r  r]   ru   rM  
shell_dictr  cmdstrs        rk   r  z,XCodeBackend.generate_test_shell_build_phase   sM   YY
d2JNNNE#=>>>-z:::GXZZ000L(**555M8::666@!DDDK333(**fndDL\LjLjLlLl-mm33s33344M6222.22222rw   c                   t                      }|                    | j        |d           |                    dd           |                    dd           |                    dt                                 |                    dt                                 |                    dt                                 |                    d	d
           |                    dd           t	          j                    ddt          j                            | j	        
                                d          gz   }d                    d |D                       }|                    d|           |                    dd
           d S )Nr  r  r  r7  r8  r9  r  r  r:  r   r  r  z
--internal
regencheckzmeson-privater   c                    g | ]}d |z  S r  r}   r  s     rk   r  zAXCodeBackend.generate_regen_shell_build_phase.<locals>.<listcomp>:  r  rw   r  r  )r   r   r   r   r   r  r   r   r]   r   r  r  s        rk   r  z-XCodeBackend.generate_regen_shell_build_phase/  so   YY
d3ZOOOE#=>>>-z:::GXZZ000L(**555M8::666@!DDDK333(**lL"',,W[WgWuWuWwWw  zI  KJ  KJ  .K  K33s33344M6222.22222rw   c           
        | j                                         D ]\  }}t          |t          j                  s!|                     |d          \  }}}|                     |d         |dd          |j        r|d         nd |j        r|d         nd |j	                  \  }}t                      }	|                    | j        |         |	d| d           |	                    dd	           |	                    d
d           |	                    dt                                 |	                    dt                                 t                      }
|	                    dd                    |d                              |	                    d|
           |D ]L}|
                    t          j                            | j                                        |                     M|	                    dd           |	                    dd           | j                                        }g }|D ];}|                    |                    dt-          d          dz                        <d                    d |D                       }|	                    dd| d|            |	                    dd           d S )NT)absolute_outputsr   r   )r  feedenvz/* Custom target r   r  r  r7  r8  r9  r  r^  z"Generate {}."r  r:  r  r  r   r  r   c                    g | ]}d | d 	S )z\'r}   )r  xs     rk   r  zJXCodeBackend.generate_custom_target_shell_build_phases.<locals>.<listcomp>Z  s     @@@|Q|||@@@rw   r  zcd 'z'; r  )r%  rd   r   r   r  r  as_meson_exe_cmdliner  r  r  r   r   r}  r   formatr   r   r]   r   r  r   r   r  )ru   rM  r  r_  r  r  r  	fixed_cmd_r  outarrayr    workdirr  r   r  s                   rk   r  z6XCodeBackend.generate_custom_target_shell_build_phases>  s   +1133 	8 	8HE1a!344 &*&E&EaZ^&E&_&_#T:s44SV58WNOi=aZ]]]aEFV:U$q''QU9:	 5 @ @LIq
 "))K!!$"4U";[Jh^cJhJhJhiii  (BCCC  !2J???  (**555  xzz:::zzH  )9)@)@A)O)OPPP  999 U U!!"',,t/?/M/M/O/OQR"S"STTTT  !EqIII  i888&4466GJ A A!!!))CR3"?"?@@@@XX@@Z@@@AAF  0M0M0MV0M0MNNN  !3Q77779	8 	8rw   c           	        | j                                         D ]I\  }}d}|j        D ]:}t          |t          j                  r|                     |||||           |dz  };J| j                                        D ]I\  }}d}|j        D ]:}t          |t          j                  r|                     |||||           |dz  };Jd S r  )	r#  rd   r  r   r   r  generate_single_generator_phaser%  rZ  )ru   rM  r  r_  r  r  s         rk   r  z9XCodeBackend.generate_generator_target_shell_build_phases^  s   *0022 	& 	&HE1L; & &gu':;; &887LZfggg A%L& +1133 	& 	&HE1L9 & &gu':;; &887LZfggg A%L&	& 	&rw   c           
        |                                 }|                                }|                     |          }| j                                        }	|                     |                     |          |                     |                    }
t                      }|	                    | j
        ||f         |d| d|            |                                }|                                }|	                    dd           |	                    dd           |	                    dt                                 |	                    dt                                 |	                    d	d| d|            d
|	gg}||f}| j        |         }t                      }|	                    d|           |D ]}|	                    |           |D ]}|                    | j        |
          }|                    |          }|                    |          D ]T}t&          j                            |                     |          |          }g }|D ]}|                    d|          }|                    d|                              d|                     |                    }|                    dt&          j                            | j        |j                            }|                    |           |                     ||                     |          |          }|                     ||          }|j        rdg|z   |z   d|dgz   }n||z   }|                    |           V|	                    dd           |	                    dd           g }|D ]d}g }|D ]5}d|v r|                    d| d            |                    |           6|                    d                    |                     ed                    |          }|	                    d|           |	                    dd           d S )Nrt  r  r  r  r7  r8  r9  r  r^  cdr  z@INPUT@z@OUTPUT@z@BUILD_DIR@z@CURRENT_SOURCE_DIR@(>)r:  r   r  r  r   \"z && r  r  )get_generatorget_exebuild_target_to_cmd_arrayr   r  r&  r  r   r   r   r}  r  get_outputsr   r   rel_to_builddirbuild_to_srcget_arglistr  r   r   r]   r   r[  r   replace_outputsreplace_extra_argsr  ) ru   r  r_  r  r  rM  	generatorexeexe_arrr  target_private_dirgen_dict
infilelistoutfilelistr  r  r  r  ofr   
infilename	base_argsr  r    r  argfull_commandquoted_cmdscmndqr   r  s                                    rk   r  z,XCodeBackend.generate_single_generator_phasel  sa    ))++	!!0055"0022!\\$*E*Ea*H*H$J]J]^_J`J`aa99d0%1FGSv`lSvSvotSvSvwww''))
))++%!;<<<+Z888'8::...,

333&"E|"E"Ee"E"EFFF7O$L!*1-	::-222 	" 	"Bb!!!! 	. 	.A
 **4+<>PQQJ!--j99I!11!44 . .GLL!<!<Q!?!?HH$ % %C++i<<C++j!44<<]DLgLghiLjLjkkC++&<bgll4K\^_^f>g>ghhCKK$$$$++D$2M2Ma2P2PR]^^..tW==$ 2$'57?T#9S!SM#ILL#*T>L----.  	>BBB+y111 	, 	,DA    !88HH\1\\\****HHQKKKKsxx{{++++[))-000,a00000rw   c           
     J   | j         D ]}t                      }| j        |         }|                    |j        |         |d           |                    dd           |                    dd           t                      }|                    d|           | j        |         j        D ]}t          j        	                    |j
        |j                  }| j                            |          sX|                    | j        ||f         t          j        	                    | j                                        |                     d}|j        D ]}t#          |t$          j                  ru|                     |          \  }	}
}|
D ]X}|                    | j        |         t          j        	                    | j                                        |                     Yt#          |t$          j                  r|                     |          }|                                D ]x}t          j        	                    ||          }|                    | j        |         t          j        	                    | j                                        |                     yPt#          |t$          j                  r0| j        ||f         }|dz  }|D ]}|                    |           t9          d	t;          |          z             |                    d
d           d S )Nrf  r  PBXSourcesBuildPhaser7  r8  r9  r   r   zUnknown input type: r:  )r  r   r#  r   rg  r   rZ  r   r   r]   r[  r  r   	is_headerr   r  r  r   r   r  r  r~  r  r  r  r  r  r  r   r   )ru   rM  r^  
phase_dictr_  file_arrr!   r  gtr  r  r  r    
output_dirgenfiless                  rk   rG  z-XCodeBackend.generate_pbx_sources_build_phase  s)   %  	I  	ID J"4(A!!!/$"7YOOO'=>>> 1:>>>zzH222'-5 y yGLL1733'11!44 y%%d&8$&CRW\\RVRbRqRqRsRsuvEwEwxxxLk I Ib%"455 I.2.M.Mb.Q.Q+T:s' ] ] ))$*Ma*P*,',,t7G7U7U7W7WYZ*[*[] ] ] ]]  E$;<< I!%!B!B2!F!FJ^^-- ] ]GLLQ77 ))$*Ma*P*,',,t7G7U7U7W7WYZ*[*[] ] ] ]]  E$788 I#;T<<PQH A%L% - - ))!,,,,- ''=B'GHHH DaHHHHA 	I  	Irw   c                j   t                      }|                    | j        |d           |                    dd           |                    d| j                   g }|                    | j        | j        dd f           | j        D ]>}| j        |         }|                    || j	        |         || j
        |         f           ?| j        D ]3}| j        |         }|                    || j        |         |d f           4t          |t          j        d                    }|D ]}t                      }|                    |d         |d           |                    dd           |                    d|d         |d	                    |d
         |                    d|d
         d           d S )Nr  r  r  r   REGENr   r  r   r   r  targetProxyr  )r   r   r  r   r   r   r   r#  r  ru  r  r%  r  r  r  r  r  )ru   rM  all_dictrs   r_  r  sorted_targetst_dicts           rk   rH  z+XCodeBackend.generate_pbx_target_dependency  s   99d4hLLL%!6777(DK0000$-$OPPP# 	[ 	[A$Q'ENNE4#6q#91d>UVW>XYZZZZ$ 	O 	OA+A.ENNE4#@#CQMNNNN  X-@-C-CDDD 	N 	NAYYF!!!A$0EFFFOOE#8999OOHadAaD111tqt5LMMM	N 	Nrw   c                   | j         D ]9}t                      }|                    | j        |         ||           |                    dd           t                      }|                    d|           |                    d| j                   |                    d| j                                                   |                    dd           |                    dd	           |                    d
d           |                    dd           |                    dd           |                    d|           ;| j         D ]}t                      }|                    | j        |         ||           |                    dd           t                      }|                    d|           t                      }|                    d           |                    d|           |                    d|           | j         D ]}t                      }|                    | j	        |         ||           |                    dd           t                      }|                    d|           t                      }|                    d|           |                    d           |                    d|           | j
                                        D ]\  }}|                     |||           | j                                        D ]\  }}t                      }|                    | j        |         |         ||           |                    dd           t                      }|                    d|           |                    d| j                   |                    dd	           |                    dd           |                    d|           d S )Nr  XCBuildConfigurationr  ARCHS	BUILD_DIRr"  z$(BUILD_DIR)ONLY_ACTIVE_ARCHr3   SWIFT_VERSIONz5.0r  macosxOBJROOTz$(BUILD_DIR)/buildr^  "$(inherited)"WARNING_CFLAGS)r   r   r   rl  r   r   r  rn  r   rp  r#  rd   generate_single_build_targetr%  ri  )ru   rM  r   r;  r  
warn_arraytarget_namer   s           rk   rI  z,XCodeBackend.generate_xc_build_configuration  s    	0 	0IiiG!!$"=i"H'S\]]]U$:;;;#IIM_m<<<""7DI666"";0@0N0N0P0PQQQ""<@@@""#5u===""?E:::""9h777""9.BCCCVY////  
	0 
	0IiiG!!$">y"I7T]^^^U$:;;;#IIM_m<<<!J 0111""#3Z@@@VY////  		0 		0IiiG!!$":9"EwPYZZZU$:;;;#IIM_m<<<!J""#3Z@@@ 0111VY//// $(#5#;#;#=#= 	Q 	QK--lKPPPP#'#6#<#<#>#> 		0 		0KiiG!!$"3K"@"KWV_```U$:;;;#IIM_m<<<""7DI666""#5u===""9h777VY////		0 		0rw   c                P   d}g }|j         D ]}t          |t          j                  rt          |t          j                  r8t          |t          j                  r/|                     |j                  }|                                }nmt          |t          j	                  r*|                     |          }|                                }n)| 
                    |          }|                                }t          j                            | j                                        ||          }|                    d|z             t          |t          j                  rd}t          |t          j                  r"|                     ||          \  }	}
||	z  }|p|
}||fS )NFr  T)r  r   r   SharedModuler)  r  r  r   r(  r  r   r   r   r]   r   r  r   r*  rx   determine_internal_dep_link_args)ru   r   r   links_dylibdep_libsr  rel_dirlibnameabs_pathsub_libssub_links_dylibs              rk   r  z-XCodeBackend.determine_internal_dep_link_args  s   $ 	= 	=A&%"455 *QHX:Y:Y !U455 +;;AHEE..**Au122 +;;A>>..**--a00..**w||D$4$B$B$D$DgwWWHOOFX-...!U011 #"!U011 =.2.S.STUW`.a.a+?H$)<_+&&rw   c           	        | j         D ]}g }d}g }d}|                     |          }	|j        D ]}
|
j        D ]}t          j                            |
j        |          }|                    t          j                            | j	        
                                |                     |                    t          j                            | j	                                        |                     |
j        D ]L}|                    t          j                            | j	                                        |                     M|                                D ]}| j	                            |          rr|	rp|                    | j                  }t          j                            t          j                            | j	                                        |                    } n|                     ||          \  }}|rddg|z   }d }t'          |t(          j                  rnt'          |t(          j                  rg }ndg}|dg|z   z  }t          j                            | j	                                        |j        |          }|j        }n|}d}||                                dz   |z   }n|                                }||j        z  }|	r|j        d         g }}n|                     |          \  }}t'          |t(          j                  sL|| j                            ||j        |j                   z  }|| j        !                    ||j                   z  }g }|"                                D ]0}||#                                z  }||$                                z  }1|j%        D ]}t'          |t(          j&                  rtO                      }| (                    |          D ]i}t          j                            | j	                                        |j)        j        |          }||vr!|*                    |           |d|z   dz   gz  }jd	}|j+        D ]}t'          |t(          j,                  rP| j-        ||f         }|d
z  }|D ]8}|.                    d          s|.                    d          r|d|z   dz   gz  }9mt'          |t(          j/                  r| 0                    |          \  }} }!| D ]o}"t          j        1                    |"          d         td          v rA|dt          j                            | j	                                        |"          z   dz   gz  }pt'          |t(          j3                  r|4                                D ]o}"t          j        1                    |"          d         td          v rA|dt          j                            | j	                                        |"          z   dz   gz  }ptk          |          t'          |t(          j                  r+||6                    |7                                          z  }n1t'          |t(          j                  r||8                                z  }d                    |          }#| j9        |         |         }$i }%| j	        j:        j        |j                  D ]}&|&tv          vr|j        <                    |&          }'|'*|'=                    | >                    |d                    }(|'?                    || j	        |j                  })|)|'@                    || j	        |j                  z  })| j        jA        |j                  <                    |j        i           <                    |&g           }*| j        jB        |j                  <                    |&g           }+|C                    |&          },|(|)z   |*z   |+z   |,z   }-|&dk    r3| D                    |          }.|.D ]}
|-|'E                    |
d          z  }-|-rbg }/|'r|jF        r| G                    ||'d          }/|&dk    rd}&n|&dk    rd}&tv          |&         }0|%H                    |0g            ||/z   |-z   |%|0<   t          j                            | j	                                        |j                  I                    d          }1t                      }2|K                    |$|2|           |2K                    dd           t                      }3|2K                    d|3           |3K                    dd           t'          |t(          j                  r-|3K                    dd           |3K                    dd           n%|#|3K                    dt          |                     |jM        r|3K                    d|jM                   |jN        r d|jN        z   }4|3K                    d|4           |3K                    d t          | >                    |d!                              |3K                    d"d#           t          | >                    |d$                   }5|5|3K                    d%|5           |jQ        r|R                    d          |R                    d          z   |R                    d          z   |R                    d          z   }6d& |6D             }6|6rt          |6          d
k    r t          jU        d'|6d(|jV         d)           t          j                            |W                                |6d	                   }7|3K                    d*d           |3K                    d+d,|7            |3K                    d-d           |3K                    d.d#           | X                    |          g}8|jF        r|8                    t          j                            | j	                                        |W                                                     |8                    t          j                            | j	        
                                |W                                                     |8|z  }8|3K                    d/| Y                    |8                     |3K                    d0|           |3K                    d1d           t'          |t(          j                  r-|3K                    d2d3           |3K                    d4d5           n0t'          |t(          j                  r|3K                    d2d6           | Z                    |3|%           |3K                    d7|#           |3K                    d8d           |3K                    d9|           |3K                    d:d           |	r|r|3K                    d;|           |3K                    d<|1           |3K                    d=|1 d>           t                      }9|3K                    d?|9           |3K                    d@d#           t                      }:|3K                    dA|:           |:K                    dB           |2K                    dC|           d S )DNFrV   z-Wl,-search_paths_firstz -Wl,-headerpad_max_install_namesz-dynamiclibrW   r   r  r   r   r8   r9   rP  r   warning_levelT)r'  r+   r   r,   r   r  r  r  r  COMBINE_HIDPI_IMAGESr3   DYLIB_CURRENT_VERSIONDYLIB_COMPATIBILITY_VERSIONEXECUTABLE_PREFIXEXECUTABLE_SUFFIXGCC_GENERATE_DEBUGGING_SYMBOLSdebugGCC_INLINES_ARE_PRIVATE_EXTERNr4   optimizationGCC_OPTIMIZATION_LEVELc                    g | ]C}|                     d           s*|                     d          s|                     d          A|DS )z.hz.hhr   )endswith)r  pchs     rk   r  z=XCodeBackend.generate_single_build_target.<locals>.<listcomp>  sP    ppps||D/A/ApS\\RWEXEXp\_\h\hin\o\opppprw   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_EXTERNHEADER_SEARCH_PATHSINSTALL_PATHLIBRARY_SEARCH_PATHSLIBRARY_STYLEBUNDLEMACH_O_TYPE	mh_bundleDYNAMICOTHER_LDFLAGSOTHER_REZFLAGSPRODUCT_NAMESECTORDER_FLAGSSWIFT_OBJC_BRIDGING_HEADERr  r  z/buildSYSTEM_HEADER_SEARCH_PATHSUSE_HEADERMAPr  r  r^  )\r   is_swift_targetinclude_dirsincdirsr   r   r]   curdirr   r   r  r  extra_build_dirsget_sourcesr  r  r  normpathr  r   r   r*  r  r[  	soversionr  	link_argsrx   determine_linker_and_stdlib_argsrx  get_project_link_argsrD  for_machineget_global_link_argsr  get_compile_argsget_link_argsr\  r  r   determine_ext_objsr   r   r  r  r   r	  r  r  r  LINKABLE_EXTENSIONSr  r  r   get_std_shared_module_link_argsget_optionsget_std_shared_lib_link_argsri  r   LANGNAMEMAPrR  get_warn_argsget_target_optionget_option_compile_argsget_option_std_argsprojects_argsglobal_argsget_extra_argsr  get_include_argsimplicit_include_directories"get_custom_target_dir_include_args
setdefaultrstripr   r   r   prefixsuffixBOOL2XCODEBOOLOPT2XCODEOPThas_pchget_pchr  r	   warningr^  r   get_target_private_dir_absnormalize_header_search_pathsadd_otherargsr   );ru   rM  r  r   r   r  r  
headerdirsbridging_headeris_swiftr  sdr  extrar   relhdylib_versionldargsinstall_pathproduct_namelinkerstdlib_argscargsr  r    
added_objsobjname_relobjname_absr  r.  o_absr  r  r  ofnameldstrvalidlangargslangr  	warn_argsstd_argspargsgargstargsr  swift_dep_dirscti_argslangnamesymrootr;  r  r@  opt_flagpchsrelative_pch_pathunquoted_headerssysheader_arrr  s;                                                              rk   r  z)XCodeBackend.generate_single_build_target8  s    E	0 E	0IHKJ O++F33H( ] ]) Z ZBah33B%%bgll43C3R3R3T3TVX&Y&YZZZ%%bgll43C3Q3Q3S3SUW&X&XYYYY/ ] ]E%%bgll43C3Q3Q3S3SUZ&[&[\\\\] ''))  #--a00 X ,,T->??D&(g&6&6rw||DDTDbDbDdDdfj7k7k&l&lOE&*&K&KFT]&^&^#X{ f57YZ]ee M&%"566 
"fe&899 -FF+_F=>II!w||D,<,J,J,L,Lfm]fgg & 0!!(%2244s:]J%2244f&&F  T&,&6w&?&*&K&KF&S&S#fe&9:: V$*::66CTV\Vhiii$*99&&BTUUUE//11 . .--///#++---^ D Da!788 D!$J'+'>'>q'A'A D D&(gll43C3Q3Q3S3SUVU]Udfq&r&r&j88&NN;777"u{':U'B&CCFL% . .a!455 ."4[,5NOG A%L!( > > >>$// >5>>&3I3I >"uu}u'<&==F> "!U%788 
.262Q2QRS2T2T/z3&0 s sF!w//77;?RRR &527<<@P@^@^@`@`bh3i3i+ilq+q*r rs $Au'>?? .&'mmoo s sF!w//77;?RRR &527<<@P@^@^@`@`bh3i3i+ilq+q*r rs +1oo-&%"455 @&@@ASASAUAUVVVFE$788 @&==???HHV$$E%k29=EH(1;F<NO &A &A{**!+//55#$2243I3I&Ra3b3bcc	#;;FDDTV\VghhH88AQSYSdeee
01CDHHIZ\^__ccdhjlmm 
.v/ABFFtRPP--d33 8+e3e;eC7?? &*%B%B6%J%JN+ D D 9 9!U C CC A!H qF$G q $(#J#J6S[ko#J#p#p v~~"))$*40H''"555).)9D)@HX&gll4#3#A#A#C#CV]SSZZ[^__GiiG!!%)<<<U$:;;;#IIM_m<<<""#95AAA&%"455 X&&'>CCC&&'DbIIII ,!**+BCDVDVWWW} K&&':FMJJJ} Dv},&&':FCCC""#C^TXTjTjkqszT{T{E|}}}""#CTJJJ#D$:$:6>$R$RSH#&&'?JJJ~ g ~~c**V^^E-B-BBV^^TZE[E[[^d^l^lmu^v^vvpptppp g4yy1}}  &nos  &n  &n  CI  CN  &n  &n  &n  o  o  o(*V5F5F5H5H$q'(R(R%!**+I5QQQ!**+>@eRc@e@efff""#A2FFF""#?FFF $ ? ? G GH2 n ''T5E5S5S5U5UW]WhWhWjWj(k(klll ''T5E5T5T5V5VX^XiXiXkXk(l(lmmm
*""#8$:\:\]m:n:nooo""><@@@""#92>>>&%"455 C&&AAA&&}kBBBBFE$788 C&&	BBB}h777""?E:::""#3R888""><@@@""#4b999 VO V&&'C_UUU"";888""9.@.@.@AAA$JJM ""#?OOO""?D999!J""#3Z@@@ 0111VY////KE	0 E	0rw   r   c                    t                      }|D ]F}t          j                            |          }d|v rd| dnd| d}|                    |           G|S )Nr   z"\"z\""r   )r   r   r   r$  r   )ru   header_dirs
header_arrr   npr   s         rk   rG  z*XCodeBackend.normalize_header_search_paths   sr    ZZ
 	& 	&A!!!$$B(+r		$2$$$$y2yyyD%%%%rw   c           	        |                                 D ]\  }}|rg }|D ]p}|                    t          d          dt          d          z            }|                    dd          }d|v sd|v rd|z   dz   }|                    |           q|                    d| d	d                    |                     d S )
Nr     r   z\\\"r   'r  OTHER_FLAGS)rd   r   r  r   r   r]   )ru   r  r]  rf  r  quoted_argsr   s          rk   rH  zXCodeBackend.add_otherargs	  s    &nn.. 	X 	XNHd X  * *A 		#b''1SWW955A		$00Aaxx3!88!AI-&&q))))&&'?'?'?'?+AVAVWWW	X 	Xrw   c                	   t                      }|                    | j        |d| j        j         d           |                    dd           t                      }|                    d|           | j        D ]#}|                    | j        |         |           $|                    dd           |                    d| j                   t                      }|                    | j	        |d	           |                    dd           t                      }|                    d|           | j        D ]#}|                    | j
        |         |           $|                    dd           |                    d| j                   t                      }|                    | j        |d
           |                    dd           t                      }|                    d|           | j        D ]#}|                    | j        |         |           $|                    dd           |                    d| j                   t                      }|                    | j        |d           |                    dd           t                      }|                    d|           | j        D ]#}|                    | j        |         |           $|                    dd           |                    d| j                   | j        D ]}	t                      }
| j        |	         }|                    ||
d|	 d           |
                    dd           t                      }|
                    d|           | j        |	         | j                 }|                    || j                   |
                    dd           |
                    d| j                   | j        D ]}	t                      }
| j        |	         }|                    ||
d|	 d           |
                    dd           t                      }|
                    d|           | j        |	         | j                 }|                    || j                   |
                    dd           |
                    d| j                   d S )Nr  r   r  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"rs  r  )r   r   r   r   r  r   r   rl  r   r   rn  r   rp  r   r#  rr  ri  r%  )ru   rM  	conf_dict	confs_arrr   r  conf_arr	test_dict
regen_dictr  r  listidr  s                rk   rJ  z*XCodeBackend.generate_xc_configurationList  s
   II	d3Y  AGlplv  mD  AG  AG  AG  	H  	H  	H5"7888JJ	0)<<< 	R 	RIt:9EyQQQQ:A>>>5t~FFF 99d3X?|}}}%!6777::/::: 	R 	RId:9EyQQQQ91===4dnEEE II	d4iA}~~~5"7888::0(;;; 	N 	NId6yA9MMMM:A>>>5t~FFF YY
d5y  CA  	B  	B  	BE#8999::18<<< 	N 	NId6yA9MMMM;Q???6GGG- 
	H 
	HKYYF*;7F!!&&2qcn2q2q2qrrrOOE#8999zzHOO18<<<%k24>BEeT^444OO;Q???OO6GGGG. 
	H 
	HKYYF*;7F!!&&2tfq2t2t2tuuuOOE#8999zzHOO18<<<%k24>BEeT^444OO;Q???OO6GGGG
	H 
	Hrw   pbxdictc                    |                     dd           |                     dt                                 |                     d| j                   t                      }|                     d|           |S )NarchiveVersionr.   classesobjectVersionr\  )r   r   r   )ru   r  rM  s      rk   r;  zXCodeBackend.generate_prefix]  sp    )3///GII...$/:::yyL111rw   c                >    |                     d| j        d           d S )N
rootObjectr  )r   r   )ru   r  s     rk   rK  zXCodeBackend.generate_suffixf  s$    t'79IJJJJJrw   )r   r   r   r   rx   )rR   r   )r   r   rR   r   rq   )r   r  r  r  r  r	  rR   r   )r   r  rR   r  )FN)r  r   r  r  rR   ro   )r  r   rR   r   )rM  r   rR   ro   )r  r
   rR   r   )rR   rn   )rm  rn   r_  r  rR   ro   )rR   r   )r  r   rR   r   )r  r   rR   ro   )Frz   r{   r|   r^  rv   r   r   	functools	lru_cacher   r  r  r  rN  rV  r&  r'  r(  r)  r+  r,  r-  r*  r.  r1  r0  r2  r  r/  r4  r5  r6  r7  r  r8  r3  r<  r=  r  r?  r  r>  r@  rA  rB  rC  rY  rC  r\  r[  rk  rD  rE  rF  r  r  r  r  r  rG  rH  rI  r  r  rG  rH  rJ  r;  rK  __classcell__)r   s   @rk   r   r      s       D     B' ' ' '? ? ? ? Y&&&   '&
   
       R# R# R# R# R#h   6 6 6 6*= = = =7 7 7 7* * * *F F F FG G G GC C C C5 5 5 53 3 3 3
/ / / /E E E E" " " "*4 4 4 4&J J J J: : : :"7 7 7 77 7 7 7
A A A A&8 &8 &8 &8P8 8 8 81 1 1 1
F8 F8 F8 F8PM" M" M" M"^. . . .- - - -+ + + +&H &H &H &HP1 1 1 1gO gO gO gORF F F FW7 W7 W7 W7r& & &P
I 
I 
I 
I+ + + +.   	' 	' 	' 	'?A ?A ?A ?ABF F F F:H H H H3 3 3 33 3 3 38 8 8 8@& & & &<1 <1 <1 <1|!I !I !I !IFN N N N270 70 70 70r' ' '2F0 F0 F0 F0P   X X XCH CH CH CHJ   K K K K K K K Krw   r   )rR   rS   )+
__future__r   r  r   r   r  r^   typingr   rV   r   r   r   r	   arglistr
   r   r   optionsr   TYPE_CHECKINGr   rx  r   r   r   r   rQ  ry  r2  rB  rA  r.  rc   rl   rn   r   r   r   r   r   Backendr   r}   rw   rk   <module>r     s   # " " " " " ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (                             " " " " " " 8 8 8 8 8 8 8 8      ? *######$$$$$$))))))	% \* + +	
 + ( - % ) ) ) ' + 0 .  %!" )+)'  * /  !' 	    d++;;; +++++++))))) U U U U 5 5 5 5 5 5 5 52 2 2 2 2 2 2 2*	# 	# 	# 	# 	# 	# 	# 	#( ( ( ( ( ( ( (       6: : : : : : : :xEK EK EK EK EK8# EK EK EK EK EKrw   