
    <h                      S SK Jr  S SKJr  S SKJrJr  S SKJr  S SK	J
r
  S SKJr  S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrSS	KJr  SS
KJr  SSKJr  SSKJr  SSKJr  SSKJrJ r   SSKJ!r!J"r"J#r#J$r$J%r%J&r&J'r'J(r(J)r)J*r*  SSK+J,r,  \RZ                  (       a  SSK.J/r/  SSK0J1r1  SSKJ2r2  SSK3J4r4  SSK5J6r6J7r7  SSK8J9r9  SSKJ:r:J;r;  SSK+J<r<  S SK=J>r>J?r?  \R                  \R                  \!\R                  \R                  \R                  4      rE " S S\>5      rFSrG\" SS9 " S S 5      5       rH " S! S"\R                  5      rJ\" SS9 " S# S$5      5       rK\" SS9 " S% S&5      5       rL\" SS9 " S' S(5      5       rM\" SS9 " S) S*5      5       rN\" SS9 " S+ S,5      5       rO\" SS9 " S- S.5      5       rP " S/ S0\O5      rQ\" SS9 " S1 S25      5       rRS7S8S3 jjrSS7S9S4 jjrT " S5 S65      rUg):    )annotations)OrderedDict)	dataclassInitVar)	lru_cache)chain)PathN   )build)dependencies)programs)mesonlib)mlog)detectlang_suffixes)
FileMachineChoiceMesonExceptionMesonBugException
OrderedSetExecutableSerialisationEnvironmentExceptionclassify_unity_sourcesget_compiler_for_sourceget_rsp_threshold)	OptionKey)ImmutableListProtocol)CompilerArgs)Compiler)Environment)InterpreterTest)StaticLinker)FileModeFileOrString)ElementaryOptionValues)	TypedDictNotRequiredc                  R    \ rS rSr% S\S'   S\S'   S\S'   S\S'   S\S	'   S\S
'   Srg)TargetIntrospectionData3   strlanguagezNotRequired[str]machineT.List[str]compiler
parameterssourcesgenerated_sources N__name__
__module____qualname____firstlineno____annotations____static_attributes__r4       |/mnt/mint/home/seanl/mnt/public/Repos/ladybird/Build/vcpkg/downloads/tools/meson-1.9.0-d1fcc2/mesonbuild/backend/backends.pyr*   r*   3   s%    !!&&r<   r*   )dfortranvalarustF)eqc                  4    \ rS rSr% S\S'   S\S'   S\S'   Srg)		RegenInfoB   r,   
source_dir	build_dirr/   depfilesr4   Nr5   r4   r<   r=   rD   rD   B   s    ONr<   rD   c                  B    \ rS rSrSrSrSrSr\S
S j5       r	SS jr
Srg	)TestProtocolH   r      r
      c                    US:X  a  U R                   $ US:X  a  U R                  $ US:X  a  U R                  $ US:X  a  U R                  $ [	        SU 35      e)NexitcodetapgtestrA   zunknown test format )EXITCODETAPGTESTRUSTr   )clsstrings     r=   from_strTestProtocol.from_strO   sZ    Z<<u_77Nw99v88O3F8<==r<   c                t    [        U 5      nXR                  L a  gXR                  L a  gXR                  L a  gg)NrO   rQ   rA   rP   )typerR   rT   rU   )selfrV   s     r=   __str__TestProtocol.__str__[   s5    4j<<YYXXr<   r4   N)rW   r,   returnz'TestProtocol'r_   r,   )r6   r7   r8   r9   rR   rS   rT   rU   classmethodrX   r]   r;   r4   r<   r=   rJ   rJ   H   s-    H
CED	> 	>r<   rJ   c                  .    \ rS rSr% SrS\S'   S\S'   Srg)	
CleanTreesf   z
Directories outputted by custom targets that have to be manually cleaned
because on Linux `ninja clean` only deletes empty directories.
r,   rG   r/   treesr4   N)r6   r7   r8   r9   __doc__r:   r;   r4   r<   r=   rc   rc   f   s     Nr<   rc   c                  p    \ rS rSr% S\S'   S\S'   S\S'   S\S'   S\S'   S	\S
'   S\S'   S\S'   SS jrSrg)InstallDatao   r,   rF   rG   prefixlibdirr/   	strip_binzT.Union[str, int]install_umaskmesonintrospectversionc                t    / U l         / U l        / U l        / U l        / U l        / U l        / U l        / U l        g N)targetsheadersmanemptydirdatasymlinksinstall_scriptsinstall_subdirsr\   s    r=   __post_init__InstallData.__post_init__|   s<    2402,.13-/	46@B:<r<   )rv   ru   rs   rx   ry   rt   rw   rr   Nr_   Noner6   r7   r8   r9   r:   r{   r;   r4   r<   r=   rh   rh   o   s4    ONKK %$  L=r<   rh   c                      \ rS rSr% S\S'   S\S'   S\S'   S\S'   S	\S
'   S\S'   S\S'   S\S'   S\S'   SrS\S'   SrS\S'   SrS\S'   SS jrSr	g)TargetInstallData   r,   fnameoutdirzInitVar[T.Optional[str]]outdir_nameboolstripzT.Mapping[str, str]install_name_mappingszT.Set[bytes]rpath_dirs_to_removeinstall_rpathzT.Optional['FileMode']install_mode
subprojectFoptionalNT.Optional[str]tag	can_stripc                    Uc*  [         R                  R                  SU R                  5      n[         R                  R                  U[         R                  R	                  U R
                  5      5      U l        g )N{prefix})ospathjoinr   basenamer   out_name)r\   r   s     r=   r{   TargetInstallData.__post_init__   sI    '',,z4;;?K["''2B2B4::2NOr<   )r   )r   r   r_   r~   )
r6   r7   r8   r9   r:   r   r   r   r{   r;   r4   r<   r=   r   r      sX    JK))K..&&((OHdCItPr<   r   c                  B    \ rS rSr% S\S'   S\S'   S\S'   SrS\S	'   S
rg)InstallEmptyDir   r,   r   
'FileMode'r   r   Nr   r   r4   r6   r7   r8   r9   r:   r   r;   r4   r<   r=   r   r      s    
IOCr<   r   c                  r    \ rS rSr% S\S'   S\S'   S\S'   S\S'   S\S'   S	rS
\S'   S	rS
\S'   S	rS\S'   Srg	)InstallDataBase   r,   r   install_pathinstall_path_namer   r   r   Nr   r   	data_typeT.Optional[bool]follow_symlinksr4   )	r6   r7   r8   r9   r:   r   r   r   r;   r4   r<   r=   r   r      s=    
IOC!%I%(,O%,r<   r   c                  L    \ rS rSr% S\S'   S\S'   S\S'   S\S'   SrS\S	'   S
rg)InstallSymlinkData   r,   targetnamer   r   Nr   r   r4   r   r4   r<   r=   r   r      s!    K
IOCr<   r   c                  J   ^  \ rS rSr  S           SU 4S jjjrSrU =r$ )SubdirInstallData   c
           
     6   > [         T
U ]  XX4XgX5        XPl        g rq   )super__init__exclude)r\   r   r   r   r   r   r   r   r   r   	__class__s             r=   r   SubdirInstallData.__init__   s     	->j_hzr<   )r   )NNN)r   r,   r   r,   r   r,   r   r   r   zT.Tuple[T.Set[str], T.Set[str]]r   r,   r   r   r   r   r   r   )r6   r7   r8   r9   r   r;   __classcell__)r   s   @r=   r   r      sI     ]a59)4S '6JY #3 r<   r   c                      \ rS rSr% S\S'   S\S'   S\S'   S\S'   S\S	'   S
\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S#S  jrS!rg")$TestSerialisation   r,   r   project_namer/   suiter   r   is_cross_builtz$T.Optional[programs.ExternalProgram]exe_wrapperneeds_exe_wrapperis_parallelcmd_argsmesonlib.EnvironmentVariablesenvshould_failzT.Optional[int]timeoutr   workdirextra_pathsrJ   protocolintprioritycmd_is_built
cmd_is_exedependsro   verbosec                v    U R                   b,  [        U R                   [        R                  5      (       d   eg g rq   )r   
isinstancer   ExternalProgramrz   s    r=   r{   TestSerialisation.__post_init__   s2    'd..0H0HIIII (r<   r4   Nr}   r   r4   r<   r=   r   r      s    
I55	&&MLMJr<   r   c                   U S:X  a  SSK Jn  UR                  X5      $ U S:X  a  SSK Jn  UR	                  X5      $ U S:X  a  SSK Jn  UR                  X5      $ U S:X  a  SSK Jn  UR                  X5      $ U S	:X  a  SS
K Jn  UR                  X5      $ U S:X  a  SSK J
n  UR                  X5      $ U S:X  a  SSK Jn  UR                  X5      $ U S:X  a  SSK Jn	  U	R                  X5      $ U S:X  a  SSK Jn
  U
R#                  X5      $ U S:X  a  SSK Jn  UR'                  X5      $ U S:X  a  SSK Jn  UR+                  X5      $ g )NninjarL   )ninjabackendvs)vs2010backendvs2010vs2012)vs2012backendvs2013)vs2013backendvs2015)vs2015backendvs2017)vs2017backendvs2019)vs2019backendvs2022vs2022backendxcode)xcodebackendnone)nonebackend) r   NinjaBackendr   autodetect_vs_versionVs2010Backendr   Vs2012Backendr   Vs2013Backendr   Vs2015Backendr   Vs2017Backendr   Vs2019Backendr   Vs2022Backendr   XCodeBackendr   NoneBackend)backendr   interpreterr   r   r   r   r   r   r   r   r   r   s                r=   get_backend_from_namer      s8   '"((<<	D#225FF	H	#**5>>	H	#**5>>	H	#**5>>	H	#**5>>	H	#**5>>	H	#**5>>	H	#**5>>	G	"((<<	F	!&&u::r<   c                <    U S:X  a  SSK Jn  UR                  XSS9$ g )Nr   rL   r   T)gen_lite)r   r   r   )	genvsnamer   r   r   s       r=   get_genvslite_backendr     s&    H#**5$*OOr<   c                     \ rS rSr% S\S'   SrScS jrSdSeS jjrS	S
.SfS jjrSgS jr	ShS jr
ShS jrSS.SiS jjrSS.SiS jjrSjS jr\" SS9SgS j5       rSkS jrSlS jrSmS jrSmS jr\" SS9        SnS j5       r      SoS jrSpS jr\SqS j5       rSr SsS jjrStS jr      SuS jr\SvS  j5       rSwS! jr         Sx                     SyS" jjr        Sz                   S{S# jjr S|S$ jr!S}S% jr"\\" SS9S~S& j5       5       r#SSS' jjr$\" SS9SS( j5       r%SS) jr&SS* jr'SS+ jr(SvS, jr)\SS- j5       r*SS. jr+SS/ jr,SS0 jr-SwS1 jr.\\" SS9SS2 j5       5       r/\0\" SS9SS3 j5       5       r1      SS4 jr2SS5 jr3SS6 jr4SS7 jr5SS8 jr6SS9 jr7SS: jr8SS; jr9SS< jr:SS= jr;SS> jr<SS? jr=SS@ jr>SSA jr?SSSB jjr@\" SS9SSC j5       rA\" SS9SSD j5       rBSSE jrCSSSF jjrDSgSG jrE\" SS9SSH j5       rFSS.   SSI jjrGSS.       SSJ jjrH S     SSK jjrISSL jrJSSM jrKSSN jrLSSO jrMSSP jrNSSSQ jjrOSSR jrPSSS jrQSST jrRSSU jrSSSV jrTSSW jrUSSX jrVSSY jrWSSZ jrXSS[ jrY    S           SS\ jjrZSS] jr[ S         SS^ jjr\SS_ jr]SvS` jr^SSa jr_Sbr`g)Backendi	  zT.Optional['Environment']environmentz	<UNKNOWN>c                   Uc  S U l         g Xl        X l        UR                   U l         [        5       U l        U R                   R                  5       U l        U R                   R                  5       U l        [        R                  " U R                   R                  5       U R                   R                  5       5      U l        [        R                  " U R                   R                  5       U R                   R                  5       5      U l        g rq   )r   r   r   setprocessed_targetsget_build_dirrG   get_source_dirrF   r   relpathbuild_to_srcsrc_to_build)r\   r   r   s      r=   r   Backend.__init__  s     =#D
& ,,-0U))779**99;$,,T-=-=-L-L-N-1-=-=-K-K-MO$,,T-=-=-K-K-M-1-=-=-L-L-NPr<   FNc                D    [        S[        U 5      R                   35      e)Nzgenerate is not implemented in )RuntimeErrorr[   r6   )r\   capture
vslite_ctxs      r=   generateBackend.generate'  s     <T$Z=P=P<QRSSr<   Twarn_multi_outputc               D   [        U[        R                  5      (       aj  U(       aO  [        UR	                  5       5      S:w  a2  [
        R                  " SUR                  < SUR                   S35        UR	                  5       S   nOi[        U[        R                  5      (       a  UR	                  5       S   nO6[        U[        R                  5      (       d   U5       eUR                  5       n[        R                  R                  U R                  U5      U5      $ )NrL   zcustom_target z@ has more than one output! Using the first one. Consider using `z[0]`.r   )r   r   CustomTargetlenget_outputsr   warningr   CustomTargetIndexBuildTargetget_filenamer   r   r   get_target_dir)r\   tr  filenames       r=   get_target_filenameBackend.get_target_filename*  s    a++,, S%9Q%>~affZ 8EEFVVHES T}}q)H52233}}q)Ha!2!2336Q63~~'Hww||D//2H==r<   c                    [         R                  R                  U R                  R	                  5       U R                  U5      5      $ rq   )r   r   r   r   r   r  r\   r   s     r=   get_target_filename_absBackend.get_target_filename_abs7  s2    ww||D,,::<d>V>VW]>^__r<   c                    [        U[        R                  5      (       d   U5       eUR                  5       (       a?  UR                  5       n[        R
                  R                  U R                  U5      U5      $ g rq   )r   r   r  get_debug_filenamer   r   r   r  )r\   r   debug_filenames      r=   get_target_debug_filename!Backend.get_target_debug_filename:  s`    &%"3"344<f<4$$&&#668N77<< 3 3F ;^LLr<   c                   [        U[        R                  5      (       d   U5       eUR                  5       (       d  g [        R
                  R                  U R                  R                  5       U R                  U5      5      $ rq   )
r   r   r  r   r   r   r   r   r   r"  r  s     r=   get_target_debug_filename_abs%Backend.get_target_debug_filename_absB  sb    &%"3"344<f<4((**ww||D,,::<d>\>\]c>deer<   absolute_pathc                   UR                  5       nU(       a  U R                  nOU R                  n[        R                  R                  [        R                  R                  XT5      5      nUR                  US5      $ )NF)
get_subdirrF   r  r   r   normpathr   get_include_args)r\   r   r0   r(  curdirleadtmppaths          r=   get_source_dir_include_args#Backend.get_source_dir_include_argsH  s[    ""$??D$$D''""277<<#=>((%88r<   c                   U(       a9  [         R                  R                  U R                  UR	                  5       5      nOUR	                  5       nUS:X  a  SnUR                  US5      $ )Nr   .F)r   r   r   rG   r*  r,  )r\   r   r0   r(  r-  s        r=   get_build_dir_include_args"Backend.get_build_dir_include_argsQ  sS    WW\\$..&2C2C2EFF&&(F|((77r<   c                J   [        U[        R                  5      (       a  UR                  5       =(       d    UR	                  5       n[
        R                  " 5       (       a9  UR                  (       a(  [        R                  " SSUR                  SS5      5      n[        U R                  U5      U5      R                  5       $ [        U[        R                  5      (       a7  [        U R                  U5      UR	                  5       5      R                  5       $ [        U[        R                  [        R                   45      (       ae  UR#                  5       (       d  [%        SUR&                   S35      e[        U R                  U5      UR	                  5       5      R                  5       $ [        U[        R(                  5      (       aI  UR*                  (       a7  [        U R                  U5      UR                  5       5      R                  5       $ g [-        SU< S35      e)Nz$[.][a]([.]?([0-9]+))*([.]?([a-z]+))*.a.soz%Tried to link against custom target "z", which is not linkable.zBUG: Tried to link to z which is not linkable)r   r   SharedLibraryget_import_filenamer  r   is_aixaix_so_archiveresubreplacer	   r  as_posixStaticLibraryr  r  is_linkable_targetr   r   
Executableimport_filenameAssertionError)r\   r   link_libs      r=   get_target_filename_for_linking'Backend.get_target_filename_for_linkingZ  s   
 fe1122113Lv7J7J7LH  V%:%:66"H$PXP`P`afhlPmn++F3X>GGII 3 344++F3V5H5H5JKTTVV!3!3U5L5L MNN,,..$'LV[[MYr%stt++F3V5H5H5JKTTVV 0 011%%D//79S9S9UV__aa5fZ?UVWWr<   )maxsizec                    [        U[        R                  5      (       a  SnU$ U R                  R                  R
                  R                  [        S5      5      S:X  a  UR                  5       nU$ SnU$ )Nr   layoutmirrorz	meson-out)	r   r   	RunTargetr   coredataoptstoreget_value_forr   r*  )r\   r   dirnames      r=   r  Backend.get_target_dirr  sm    feoo..G
 	 &&//==i>QRV^^'')G  "Gr<   c                \   [         R                  R                  U R                  R	                  5       U R                  U5      5      n[         R                  R                  U R                  R	                  5       U R                  U5      5      n[         R                  R                  X45      $ )z7Get a target dir relative to another target's directory)r   r   r   r   r   r  r  )r\   r  o
target_dir
othert_dirs        r=   get_target_dir_relative_to"Backend.get_target_dir_relative_to}  ss    WW\\$"2"2"@"@"BDDWDWXYDZ[
WW\\$"2"2"@"@"BDDWDWXYDZ[
wwz66r<   c                    U R                  U5      nU(       a*  [        R                  R                  U R                  U5      $ U R                  $ rq   )r  r   r   r   r  )r\   r   rU  s      r=   get_target_source_dirBackend.get_target_source_dir  s<    ((0
77<< 1 1:>>   r<   c                b    [         R                  R                  U R                  USS9S-   5      $ )NFr  z.p)r   r   r   r  r  s     r=   get_target_private_dirBackend.get_target_private_dir  s+    ww||D44Vu4UX\\]]r<   c                    [         R                  R                  U R                  R	                  5       U R                  U5      5      $ rq   )r   r   r   r   r   r]  r  s     r=   get_target_private_dir_abs"Backend.get_target_private_dir_abs  s2    ww||D,,::<d>Y>YZ`>abbr<   c                   [        U[        R                  [        R                  45      (       a/  [        R
                  R                  U R                  U5      U5      $ [        R
                  R                  U R                  U5      U5      $ )z
Takes a BuildTarget, a generator source (CustomTarget or GeneratedList),
and a generated source filename.
Returns the full path of the generated source relative to the build root
)	r   r   r  r  r   r   r   r  r]  )r\   r   gensrcsrcs       r=   get_target_generated_dir Backend.get_target_generated_dir  sd     fu1153J3JKLL77<< 3 3F ;SAA ww||D77?EEr<   c                    UR                    SU SU 3n[        R                  R                  U R	                  U5      U5      $ )Nz-unityr3  )r   r   r   from_built_filer]  )r\   r   suffixnumberosrcs        r=   get_unity_source_fileBackend.get_unity_source_file  sA     ++fVHAfX6}},,T-H-H-PRVWWr<   c                D  ^ ^^^ / m/ m[        TR                  R                  5       U5      nT R                  TS5      n[	        U[
        5      (       d   S5       eS	UUU U4S jjnUR                  5        H  u  pgUS-   nSn	S n
U HW  nX:  a5  U
(       a  U
R                  5         U" UR                  5       U	5      n
U	S-  n	SnU
R                  SU S35        US-  nMY     U
(       d  Mt  U
R                  5         M     T H  n[        R                  " XS-   5        M     T$ )
N
unity_sizefor mypyc                  > TR                  T	X5      nUR                  TR                  R                  5       TR                  R	                  5       5      nUS-   nTR                  U5        [        R                  R                  U5      n[        R                  R                  U5      (       d  [        R                  " U5        TR                  U5        [        USSS9$ )N.tmpwutf-8encoding)rl  r(  r   r  r   appendr   r   rQ  existsmakedirsopen)
ri  unity_file_number	unity_src
outfileabsoutfileabs_tmpoutfileabs_tmp_dir	abs_filesresultr\   r   s
         r=   init_language_file8Backend.generate_unity_files.<locals>.init_language_file  s    2266UI"001A1A1P1P1R151A1A1O1O1QSJ'&0NZ(!#!@77>>"455./MM)$g>>r<   rL   r   z	#include<z>
rr  )ri  r,   r{  r   r_   zT.TextIO)r   	compilersvaluesget_target_optionr   r   itemscloseget_default_suffixwriter   replace_if_different)r\   r   r|  compsrcsro  r  compsrcsfiles_in_currentr{  ofilerd  xr  r  s   ``           @@r=   generate_unity_filesBackend.generate_unity_files  s   !#	(*)&*:*:*A*A*CYO++FLA
*c**6J6*
	? 
	? #..*JD)A~ ! E#1.t/F/F/HJ[\E%*%'($iuC01 A%   u! +$ A))!Z8 r<   c                    [         R                  R                  [         R                  R                  SU 5      [         R                  R                  SU5      5      $ )Ndummyprefixdir)r   r   r  r   )todirfromdirs     r=   r  Backend.relpath  s>    wwrww||,<eD!ww||,<gFH 	Hr<   c                    U R                  XR                  5       U5      u  p4[        [        R	                  U5      5      U4$ rq   )_flatten_object_listget_objectslistdictfromkeys)r\   r   proj_dir_to_build_rootobj_listdepss        r=   flatten_object_listBackend.flatten_object_list  s9    226;M;M;OQghDMM(+,d22r<   c                ~    U R                  UR                  U/S5      u  p#[        [        R	                  U5      5      $ )Nr   )r  r   r  r  r  )r\   objectsr  _s       r=   determine_ext_objsBackend.determine_ext_objs  s2    //	2NDMM(+,,r<   c                   / n/ nU GH1  n[        U[        5      (       aM  [        R                  R	                  UU R
                  UR                  5       U5      nUR                  U5        Mf  [        U[        R                  5      (       a  UR                  (       aL  [        R                  R	                  UUR                  U R
                  5      5      nUR                  U5        M  [        R                  R	                  UU R
                  5      nUR                  UR                  U5      5        GM/  [        U[        R                  5      (       a  UR                  (       aK  U R                  UR                   UR"                  U5      u  pUR%                  U5        UR%                  U	5        U R'                  U5      n
U(       a8  U
 H1  nUR                  [        R                  R	                  X75      5        M3     OUR%                  U
5        UR                  UR                   5        GM)  [)        S5      e   XE4$ )Nz!Unknown data type in object list.)r   r,   r   r   r   r  r*  rw  r   r   is_builtrel_to_builddirr   ExtractedObjects	recursiver  r   objlistextend_determine_ext_objsr   )r\   r   r  r  r  r  objrT  objsr>   new_objss              r=   r  Backend._flatten_object_list  s    !#/1C#s##GGLL!7!%!2!2F4E4E4GN"C//<<%;%(%8%89J9J%KMAOOA&%;%)%6%68AOOC$7$7$:;C!7!788=="77

CKKQghGDOOD)KKN33C8)% 5K(OP & OOH-CJJ'$%HII7 8 ~r<   c                Z    U R                    H  nUR                  S5      (       d  M    g   g)NswiftTF)r2   endswith)r   ss     r=   is_swift_targetBackend.is_swift_target  s'    Azz'""   r<   c                p    / nUR                    H#  nUR                  U R                  U5      5        M%     U$ rq   )link_targetsrw  r`  )r\   r   r  ls       r=   determine_swift_dep_dirs Backend.determine_swift_dep_dirs
  s3     $$AMM$99!<= %r<   c                	   Utp[        U[        R                  5      (       a  UR                  5       nUR                  nO[        U[
        R                  5      (       a  U R                  U5      /nUR                  nO[        U[
        R                  5      (       a#  U R                  U5      /n[        R                  nOi[        U[        R                  5      (       a7  UR                  U R                  R                  5      /n[        R                  nOU/n[        R                  n/ nU H  n[        U[        R                  5      (       a  UUR                  5       -  nM7  [        U[
        R                  [
        R                  45      (       a"  UR!                  U R                  U5      5        M  [        U[        R                  5      (       a6  UR!                  UR                  U R                  R                  5      5        M  UR!                  U5        M     U R                  R"                  U   nUR%                  5       (       d  UR'                  5       (       a  U R)                  X=(       d    / 5      nO/ nU R                  R"                  R+                  U5      (       + nU(       ao  U R                  R-                  5       (       aP  U R                  R/                  5       (       d  SUS   -   S-   n[1        U5      eU R                  R3                  5       nOUS   R5                  S5      (       a  SS/U-   nOmUS   R5                  S5      (       aT  [        R$                  " 5       (       d:  [        R&                  " 5       (       d   [        R6                  " 5       (       d  S/U-   nS nU=(       d    U R                  R9                  5       nU=(       a    [;        S	 U 5       5      [=        5       :  nU(       a  [>        R@                  " 5       nS
RC                  S U 5       5      nURE                  URG                  SSS95        URI                  5       nSU S3n[J        RL                  RC                  U R                  RO                  5       U5      n[Q        USSSS9 nURS                  U5        SU 3/nS S S 5        [U        X-   UUUUXEXU
5
      $ ! , (       d  f       N"= f)NzAn exe_wrapper is needed for r   z` but was not found. Please define one in cross file and check the command and/or add it to PATH.z.jarjavaz-jarz.exemonoc              3  >   #    U  H  n[        U5      S -   v   M     g7f)rL   N)r  ).0is     r=   	<genexpr>7Backend.get_executable_serialisation.<locals>.<genexpr>U  s     1Oh#a&1*hs    c              3  N   #    U  H  n[         R                  " U5      v   M     g 7frq   )r   	quote_arg)r  args     r=   r  r  Y  s     HxH..s33x   #%rt  ignore)rv  errors
meson_rsp_z.rsprs  
)rv  newline@)+r   r   r   get_commandfor_machiner   r  r  r  r   BUILDr   r   r  r   rF   rw  machines
is_windows	is_cygwindetermine_windows_extra_pathsmatches_build_machineneed_exe_wrapperhas_exe_wrapperr   get_exe_wrapperr  is_wslr   sumr   hashlibsha1r   updateencode	hexdigestr   r   get_scratch_dirrz  r  r   )r\   cmdr   extra_bdepsr  feedr   can_use_rsp_filer   r   installdir_mapexeraw_cmd_argsexe_cmdexe_for_machiner   cr.   r   r   msgr   needs_rsp_filehasherargsdigestscratch_filersp_filefs                                r=   get_executable_serialisation$Backend.get_executable_serialisation  s    !c83344oo'G!ooOU..//33C89G!ooOU//00 33C89G+11OX]]++**4+;+;+F+FGHG+11OeG+11O "A!X5566AMMO+A 1 153E3EFGG < <Q ?@Ax}}-- 1 1$2B2B2M2M NO"  ""++O<7#4#4#6#6<<SBSQSTKK!--66LL_]]d..??AA##33555
B FS S$S))**::<Kqz""6**!6*W4$$V,,h6I6I6K6KxOaOaOcOcgogvgvgxgx!(W,K=T--;;= *fc1Oh1O.OSdSf.f\\^F88HxHHDMM$++wx+HI%%'F'xt4Lww||D$4$4$D$D$FUHhgtDzN+ E 'w'93'2G'2G3Q_a 	a	 EDs   %S
S'c                 
   / nUR                  U5        UR                  U5        U R                  XXEXhXS9n/ nUR                  (       a  UR                  S5        UR                  (       a  UR                  S5        U(       a  UR                  S5        [        S UR                   5       5      (       a  UR                  S5        U(       a"  UR                  (       a  UR                  S5        UR                  =(       a    U(       + nU=(       d    [        U5      nU(       a  UR                  S5        U(       a  UR                  S	5        U(       a  US/:X  a  [        R                  " S
5      (       ae  / nUR                  0 5      R                  5        H  u  nnUR                  U SU 35        M     S
/U-   UR                  -   SR                  U5      4$ [        S UR                   5       5      (       a  UR                  S5        U(       d~  U(       d  U(       d  UR                  S4$ / nU(       a  USU/-  nU(       a  USU/-  nU R                  R!                  5       SS/-   U-   S/-   UR                  -   SR                  U5      4$ [#        U[$        R&                  [(        R*                  [(        R,                  45      (       a*  [.        R0                  R3                  UR4                  5      nOh[#        U[6        R8                  5      (       a*  [.        R0                  R3                  UR:                  5      nO[.        R0                  R3                  U5      n[<        R>                  " 5       nUR@                  (       a  UR@                  RC                  U5        URE                  [G        [I        UR                  5      SS95        URE                  [G        [I        URJ                  5      SS95        URE                  [G        [I        U5      SS95        URE                  [G        [I        U5      SS95        URM                  5       nSU SU S3n[.        R0                  R                  U R                  RO                  5       U5      n[Q        US5       n[R        RT                  " UU5        SSS5        U R                  R!                  5       SSSU/-   SR                  U5      4$ ! , (       d  f       N@= f)zI
Serialize an executable for running with a generator or a custom target
)r   zto set PATHzto use exe_wrapperzto set workdirc              3  ,   #    U  H
  nS U;   v   M     g7f)r  Nr4   )r  r  s     r=   r  /Backend.as_meson_exe_cmdline.<locals>.<genexpr>  s     .+Qtqy+s   z!because command contains newlinesz
to set envzto capture outputzto feed inputr   =z, c              3  B   #    U  H  oR                  S 5      v   M     g7f)r  N)
startswithr  as     r=   r  r    s     6+Q||C  +s   zbecause command is too longr   z	--capturez--feedz
--internalr  z--rt  ru  
meson_exe_r  z.datwbNz
--unpickle)+rw  r  r  r   r   anyr   varnamescan_use_envr   shutilwhichget_envr  r   r   get_build_commandr   r   r   r   r  r  r   r   r   r   r   r   r   r  r  r   hashr  bytesr,   r   r  r  rz  pickledump)r\   r  r   r   r  r  r  force_serializer   r  r   r  esreasonsr  envlistkvr  r   r  r  r  exe_datar  s                            r=   as_meson_exe_cmdlineBackend.as_meson_exe_cmdlinef  s    uw

3

8..s[SW^n.  A!>>NN=)>>NN/0NN+,."++...NN>?3<<NN<( oo=o*=):T']NN./NN?+7|n4e9L9LGB--/1!AaSz* 07W$r{{2DIIg4FFF6"++666NN894{{B& "Dg..4((   224e7LLtSW[V\\_a_j_jj		'" 
 cH44!--u/A/AC D Dww''1HX]]++ww''		2Hww'',H 66FFKKeC,w?@eC

Og>?eCL7;<eCI89!!##H:Qvhd;77<< 0 0 @ @ BLQ(D!QKKA "  224e\[c7dd		'"$ 	$ "!s   S//
S=c                   [         R                  R                  U R                  R	                  5       S5      n[        US5       nU R                  U5        S S S 5        [         R                  R                  U R                  R	                  5       S5      n[        US5       nU R                  U5        S S S 5        X4$ ! , (       d  f       No= f! , (       d  f       X4$ = f)Nzmeson_test_setup.datr  zmeson_benchmark_setup.dat)r   r   r   r   r  rz  write_test_filewrite_benchmark_file)r\   	test_datadatafilebenchmark_datas       r=   serialize_testsBackend.serialize_tests  s    GGLL!1!1!A!A!CE[\	)T"h  * #d&6&6&F&F&HJef.$'8%%h/ ((( #" ('((s   C #C 
C
C!c                    [        U[        R                  5      (       a%  U R                  R                  UR                     / 4$ UR                  5       u  p#X#4$ )z}
If we're building a static library, there is only one static linker.
Otherwise, we query the target for the dynamic linker.
)r   r   rA  static_linkerr  $get_clink_dynamic_linker_and_stdlibs)r\   r   r  stdlib_argss       r=    determine_linker_and_stdlib_args(Backend.determine_linker_and_stdlib_args  sO    
 fe1122::++F,>,>?CCDDF~r<   c                <   [         R                  R                  bB  U R                  [         R                  R                  [         R                  R                  5      n U R                  [         R                  R                  5      nSn[        U5      S:  ag  SR                  USS  5      n[        U 5      [        U5      S-   :  a8  [        R                  " U R                  S5      5      R                  5       S-   nUn S H  nU R                  US5      n M     X -   $ )	Nr      /)   rt  r  )r(  \:)r   r   altsepr?  sepsplitr  r   r  r  r  r  )r   partshashedtempchs        r=   canonicalize_filenameBackend.canonicalize_filename  s     77>>%MM"''.."''++>EBGGKK(u:>88E"#J'D5zCIN* ell7&;<FFH3N"BMM"c*E #~r<   c                
   [        U[        R                  5      (       d   e[        U[        R                  5      (       a  UR
                  U   $ U R                  R                  5       nUR                  U R                  5      nUR                  S5      (       a  UR                  (       ad  [        R                  R                  U5      (       a  U[        U5      S-   S  n[        R                  R!                  X`R#                  U5      5      nO[        R                  R%                  U5      nSUS S -   S-   nGO UR                  (       ag  [        R                  R                  U5      (       a  U[        U5      S-   S  nS[        R                  R!                  X`R#                  U5      5      -   nO[        R                  R                  U5      (       a  UnO[        R                  R!                  [        R                  R'                  XV5      [        R                  R'                  U R                  R)                  5       UR+                  5       5      5      nU R                  R,                  UR.                     nUR1                  5       n	UR3                  5       S:X  a  U R5                  US5      n
U
(       d0  [        U[        R6                  5      (       ao  UR8                  (       a^  UR;                  SS5      S   [<        S	   ;  a<  [        U[        R6                  5      (       a  UR8                  (       d  [?        S
5      eOSn	U RA                  U5      S-   U	-   nUb  [        R                  R'                  XK5      $ U$ )N)z.valaz.gsrL   zmeson-generated_r)  z.ctaskingb_ltor3  r  zTried using MIL linking for a static library with a assembly file. This can only be done if the static library is prelinked or disable 'b_lto'.mil)!r   r   r   r   CompileTargetsources_mapr   r   r  r  r  r  r   r   isabsr  r  r]  r   r   r  r*  r  r  get_object_suffixget_idr  rA  prelinkrsplitr   r   r4  )r\   r   r0   source	targetdirrG   rel_src
gen_sourcer.   object_suffixuse_ltorets               r=   object_filename_from_source#Backend.object_filename_from_source  s   &(--0000fe1122%%f--$$224	(():):; ,--77==))%c)nq&8&9:G''//'3N3Nv3VW''**73+gcrl:TAJ__ww}}W%%!#i.1"4"56+bggoogGbGbciGj.kkJww}}W%%$
WW__RWW\\)-M-/WW\\$:J:J:Y:Y:[]c]n]n]p-qs
""++F,>,>?113??	),,VW=G:fe.A.ABBv~~}}S!,Q/=3EE!&%*=*=>>v~~2  4G  H  H$)M((4s:]J 77<<	//
r<   c                   / nU R                  UR                  5      n[        UR                  5      nUR                   H[  nUR                  5        HD  nU R                  UR                  XV5      nUR                  [        R                  " U5      5        MF     M]     / nU Hw  n	U R                  R                  U	5      (       a  UR                  U	5        M6  U R                  R                  U	5      (       d  MX  UR                  U	R                  5       5        My     UR                  (       a  U R                  UR                  5      (       a  UR                  R                  R!                  5        Hs  u  pUR                  R"                  U
   nUR%                  5       S:X  d  M4  U R'                  X5      nUR                  [(        R*                  R-                  X=5      5        Mu     U(       d  U$ U R/                  UR                  5      (       a  [1        UR                  R"                  R3                  5       U5      n/ nU R5                  UR                  S5      n[7        U[8        5      (       d   S5       eUR!                  5        H  u  nnUR:                  [<        ;   a  UU-  nM!  [?        [A        U5      U-   S-
  U-  5       H?  nU RC                  UR                  URE                  5       U5      nUR                  U5        MA     M     U H`  n[G        UR                  R"                  R3                  5       U5      nU RI                  UR                  UUU5      nUR                  U5        Mb     U$ )Nmsvcro  rp  rL   )%r]  r   r  srclistgenlistr  re  rw  r   from_built_relativer   	is_source	is_objectrelative_namepchtarget_uses_pchr  r  get_argument_syntaxget_msvc_pch_objnamer   r   r   is_unityr   r  r  r   r   r-   LANGS_CANT_UNITYranger  rl  r  r   rH  )r\   extobjr  rB  raw_sourcesrc  rr   r2   r  langrR  r0   objnamer  ro  r  r  r  _srcrk  s                        r=   r  Backend._determine_ext_objs  s    //>	 6>>*nnF'')44V]]FN""4#;#;D#AB * % +-A))!,,q!!!++A..aoo/0	  ::$..v}}==#]]..446	!==2248//1V;"77BGMM"'',,y"BC	 7 M
 ==''-fmm.E.E.L.L.NPWXHG//|LJj#..:
:.&nn.
d==$44tOGD	J 6 :zIJA55fmm6:6M6M6OQRTDNN4( K	 / D.v}}/F/F/M/M/OQUVH66v}}hPTV_`GMM'" 
 r<   c                    / nU R                  U5      nUR                  US5      nUR                  UR                  5       5      nU(       a  X1R	                  XFS   5      -  nXS-   $ )NFr   )r]  r,  get_pchget_languageget_pch_use_args)r\   r0   r   r  pchpathincludeargsps          r=   get_pch_include_argsBackend.get_pch_include_argsW  sc    --f5//?NN80023--gt<<D!!r<   c                |    [        U5      S:X  a  SU S3$ [        R                  R                  US   5      S   S-   $ )NrL   
meson_pch-z.objr   )r  r   r   splitext)r\   r\  rR  s      r=   rU  Backend.get_msvc_pch_objname`  s?    s8q=vT**wwA'*V33r<   c                   SU SU 3n[         R                  R                  U R                  U5      U5      n[         R                  R                  U R                  U5      n[         R
                  " [         R                  R                  U5      SS9  S[         R                  R                  U5       S3nUS-   n[        USS	S
9 n	U	R                  U5        S S S 5        [        R                  " Xh5        U$ ! , (       d  f       N&= f)Nrj  r3  Texist_okz
#include ""rr  rs  rt  ru  )r   r   r   r]  rG   ry  rQ  r   rz  r  r   r  )
r\   r   r\  
pch_header	impl_namepch_rel_to_buildpch_filecontentpch_file_tmpr  s
             r=   create_msvc_pch_implementation&Backend.create_msvc_pch_implementationf  s     !av.	77<<(C(CF(KYW 77<<0@A
BGGOOH-=rww//
;<A>&(,g6!GGG 7%%h= 76s   C99
Dc                ~     [         R                  " SU R                  US5      5      $ ! [        [        4 a     gf = f)Nr   b_pchF)Tcastr  KeyErrorAttributeErrorr  s     r=   rS  Backend.target_uses_pchw  s<    	66&$"8"8"IJJ.) 		s   &) <<c                    / nU  H<  nUR                  S5      (       a  UR                  SS5      nUR                  U5        M>     U$ )N)z-Dz/Dr+  z\\)r  r?  rw  )r  
extra_argsr  s      r=   escape_extra_argsBackend.escape_extra_args}  sH     #%
C~~l++kk$/c" 
 r<   c                    UR                   U R                  R                  UR                     ;   a  UR	                  5       $ / $ rq   )r-   r   stdlibsr  get_no_stdinc_args)r\   r   r0   s      r=   get_no_stdlib_argsBackend.get_no_stdlib_args  s9    

 2 263E3E FF..00	r<   c           
        UR                  5       nX0R                  X5      -  nX2R                  5       -  nX2R                  [        R
                  " SU R                  US5      5      5      -  nU R                  US5      (       a  X2R                  5       -  nX2R                  XR                  UR                  5      -  nX2R                  XR                  UR                  5      -  nU R                  US5      n[        U[        5      (       d   S5       eX2R                  U5      -  nU R                  US5      n[        U[        5      (       d   S5       eX2R!                  U5      -  nX0R"                  R%                  X!R                  UR&                  5      -  nX0R"                  R)                  X!R&                  5      -  nX0R                  R*                  R-                  UR&                  UR/                  5       5      -  nSU;   a  SU;   d  S	U;   a  UR1                  S5        [        U["        R2                  5      (       a  X2R5                  5       -  n[        U["        R6                  5      (       a$  UR8                  (       a  X2R5                  5       -  nOR[        U["        R6                  ["        R:                  45      (       a#  UR<                  (       a  X2R?                  5       -  n[A        URC                  5       5       H  nURE                  5       (       d  M  URF                  S
:X  av  URH                  S:X  a3  [        U[J        RL                  5      (       d   eUSURN                  /-  nOF[        U[J        RP                  5      (       a  X6RS                  S
5      -  nOX2RU                  U5      -  n[        U["        R:                  5      (       d  M  X6RW                  U5      -  nM     URF                  S
:X  GaQ  URX                   GH@  nURN                  S:X  d  M  URH                  S:X  ah  [        U[J        RL                  5      (       d   eURZ                  b8  URZ                   H&  nUR]                  S5      (       d  M  USUSS  /-  n  M     M  M  [        U[J        R^                  5      (       d  M  UR`                  c  M  UR`                  Rc                  S5      n[e        U5      S:w  a%  [f        Rh                  " SUR`                   35          O8 [        [k        US   5      S-  S-  5      US'   USUS    SUS    3/-  nGMC     URF                  S:X  aL  [o        URp                  URr                  5       H(  n	U Ru                  U	5      n
X2Rw                  U
S5      -  nM*     U$ ! [l         a(    [f        Rh                  " SUR`                   35           M  f = f)Nr,   warning_levelwerroroptimizationrp  debugz/Ziz/ZIz/Z7r@   	pkgconfigz--pkgzglib-2.0)z>=z==z--target-glibr
   r3  rM   z$GLib version has unexpected format: rL   r   r?   F)<compiler_argsr  get_always_argsget_warn_argsr{  r|  r  get_werror_argsget_option_compile_argsr   r   get_option_std_argsr   r,   get_optimization_argsr   get_debug_argsr   get_project_argsr  get_global_argsrN  get_external_argsrb  remover9  get_pic_argsrA  picrC  pieget_pie_argsreversedget_external_depsfoundr-   	type_namer   ExternalDependencyr   ExternalLibraryget_link_argsget_dependency_compile_argsget_exe_args
added_depsversion_reqsr  InternalDependencyro   r/  r  r   r  r   
ValueErrorr   r  link_whole_targetsr]  r,  )r\   r   r0   commandsr  r  depreqglib_versionltpriv_dirs              r=   generate_basic_compiler_args$Backend.generate_basic_compiler_args  s    ))+
 	++F==,,..**166%9O9OPVXg9h+ijj
 !!&(330022H 	44V=M=MvO`O`aa009I9I6K\K\]]--fnE,,,8j8,22<@@&&vw7%&&2
2&++E22 	JJ//:K:KVM_M_`` 	JJ..x9K9KLL 	$$--??@R@RT\TiTiTkll XUh%6EX<MOOE"fe1122--//Hfe1122vzz--//H!4!4e6F6F GHHVZZ--//H
 F4467C99;;  F*==K/%c<+J+JKKKK#(( 33H\%A%ABB 1 1& 99H@@EE &%"2"233,,X66 8$ &((88z)}}3)#|/N/NOOOO++7'*'7'7#&>>,#?#?$,#ab'0J$JH$) (8 8
 $C)H)HIIckkNe'*{{'8'8'=|,1 LL+OPSP[P[})]^!" /23|A3G13LPQ2Q.RLO !_a8I<XY?J[6\$]]- )2 	)F//1J1JK66r:55hFF L   * " LL+OPSP[P[})]^!"s    V//-W! W!c                   / nU H  nUR                  5       (       d  [        SUR                  5        S35      eU R                  U5      nU(       d  MO  UR	                  5       S:X  a  SU-   nO>UR                  5       S:X  a  UR                  S5      (       a  OUR                  5       U-   nUR                  U5        M     U$ )Nz)Tried to link with a non-library target "z".r>   z-Wl,nvlinkr7  )	rB  r  get_basenamerG  rb  get_linker_idr  get_linker_lib_prefixrw  )r\   r0   r  r  r>   r  s         r=   build_target_link_arguments#Backend.build_target_link_arguments  s    A''))"%Nq~~O_N``b#cdd66q9C$$&#-sl'')X5#,,t:L:L 446<KK' ( r<   c                   [        5       nU R                  R                  UR                     R	                  5       nU(       a/  UR                  [        R                  R                  US5      5        U R                  R                  UR                     R                  5       nU(       a/  UR                  [        R                  R                  US5      5        [        U[        R                  5      (       au  UR                  R                  5        HW  nUR                  UR!                  U R                  5      5        UR                  UR#                  U R                  5      5        MY     [%        U5      $ )Nbin)r   r   
propertiesr  get_rootaddr   r   r   get_sys_rootr   r   r  r  r  r  get_program_dirsget_library_dirsr  )r\   r   pathsrootsys_rootccs         r=   get_mingw_extra_pathsBackend.get_mingw_extra_paths  s   !+**6+=+=>GGIIIbggll4/0##..v/A/ABOOQIIbggll8U34fe//00&&--/R001A1ABCR001A1ABC 0 E{r<   c           	        U R                  S5      (       a  U SS  n [        U 5      nUR                  5       (       d  g  UR                  SS9nUR
                  R                  S5       H  n[        UR
                  5      s  $    UR                  5       (       a  UR
                  n[        SR                  UR                  5       R                  SSS	95      5      nUR                  S5       H  n[        U5      s  $    g ! [         a     g f = f)
N)z-lz-Lr
   T)strictz*.dllz/binz/librL   )maxsplit)r  r	   is_absoluteresolveFileNotFoundErrorparentglobr,   is_filer   r@  r@  )link_argrf  r  binpathr  s        r=   search_dll_pathBackend.search_dll_path$  s     |,,|HN}}				&A w'Aqxx=  ( 99;;Av{{1::<#6#6v#6#JKLg&Aw< '  ! 		s   C? ?
DDc           
        [        5       nUR                   Hv  nUR                  S:X  a*  UR                  SSS9nU(       a  UR	                  U5        M=  UR                  [        S[        U R                  UR                  5      5      5        Mx     [        UR                  UR                  5       HD  n[        U[        R                  5      (       d  M$  UR                  U R!                  U5      5        MF     U$ )a  Find paths to all DLLs needed for a given target, since
we link against import libs, and we don't know the actual
path of the DLLs.

1. If there are DLLs in the same directory than the .lib dir, use it
2. If there is a sibbling directory named 'bin' with DLLs in it, use it
r  bindirr   )r  default_valueN)r   external_depsr  get_variabler  r  filtermapr  	link_argsr   r  r  r   r   r  extract_dll_paths)rV   r   resultsr  r  r  s         r=   r  Backend.extract_dll_paths@  s     %''C}}+))HB)OKK'NN6$C,?,?(OPQ ( v**F,E,EFA!U..//s44Q78 G r<   c                   [        5       n[        5       n[        5       n[        U[        R                  5      (       a  UR	                  UR                  5       5        U HT  nUR                  U5        [        U[        R                  5      (       d  M5  UR	                  UR                  5       5        MV     U H[  n[        R                  R                  U R                  R                  5       U R                  U5      5      nUR                  U5        M]     [        U[        R                  5      (       at  UR	                  U R                  U5      5        U R                  R                  R                  UR                   5      (       d   UR	                  U R#                  U5      5        [%        U5      [%        U5      -   $ )zOn Windows there is no such thing as an rpath.

We must determine all locations of DLLs that this exe
links to and return them so they can be used in unit
tests.
)r   r   r   r  r  get_all_link_depsr  r   r   r   r   r   r  r  r  r  r  r  r  )	r\   r   r  prospectivesinternal_depsr  bdeplddirsegs	            r=   r  %Backend.determine_windows_extra_paths\  sM    7:e$'E$'Efe//00 8 8 :;DT"$ 1 122##D$:$:$<=   BWW\\$"2"2"@"@"BDDWDWXZD[\Ff%  fe//00  !7!7!?@##,,BB6CUCUVV$$T%?%?%GHM"T-%888r<   c                X    U R                  U R                  R                  5       U5        g rq   )write_test_serialisationr   get_benchmarksr\   r  s     r=   r  Backend.write_benchmark_file  s    %%djj&?&?&A8Lr<   c                X    U R                  U R                  R                  5       U5        g rq   )r  r   	get_testsr  s     r=   r  Backend.write_test_file  s    %%djj&:&:&<hGr<   c                  ^ / n[        US S9 GH  nUR                  5       n[        U[        R                  5      (       a  UR                  5       nOH[        R                  R                  U R                  R                  5       U R                  U5      5      /n[        U[        R                  [        R                  45      (       a  UR                  nO[        R                   nUR"                   HS  n[        U[        R                  5      (       d  M$  UR                  [        R$                  L d  MC  [        R$                  n  O   U R                  R'                  U5      nU R                  R)                  5       n	U R                  R*                  UR                     n
U
R-                  5       (       d  U
R/                  5       (       a  / n[        U[        R0                  5      (       a  [3        UR5                  5       5      nUR7                  UR8                  5        UR7                  S UR"                   5       5        U R;                  XK5      nO/ n/ n[=        UR8                  5      n[        U[        R>                  5      (       a  URA                  U5        UR"                   GH  n[        U[        R>                  5      (       a  URA                  U5        O:[        U[        RB                  5      (       a  URA                  URD                  5        [        U[F        RH                  5      (       ad  [        R                  R                  U R                  R                  5       URK                  U RL                  5      5      nURO                  U5        M  [        U[P        5      (       a  URO                  U5        GM  [        U[        R>                  [        RB                  45      (       a-  UR7                  U RS                  XsRT                  5      5        GMw  [        U[        R                  5      (       a"  UR7                  UR                  5       5        GM  [W        S5      e   [X        RZ                  " UR\                  5      nU
R-                  5       (       Gd  U
R/                  5       (       Gd   [=        5       nU Hm  n[        U[        R                  5      (       d  M$  UR_                  5        H5  n[        U[        R`                  5      (       d  M$  URA                  U5        M7     Mo     U R                  R                  5       m[=        U4S jU 5       5      nU(       aM  URc                  S[3        U5      S5        U
Re                  5       (       a  URc                  S[3        U5      S5        [g        URi                  5       URj                  URl                  XXXR                  Ro                  5       URp                  XURr                  URt                  URT                  XRv                  URx                  [        U[        R>                  [        RB                  45      [        U[        Rz                  5      U Vs/ s H  nUR}                  5       PM     snU R                  R~                  R                  UR                  5      nURO                  U5        GM     U$ s  snf )	Nc                     SU R                   -  $ )N)r   )tsts    r=   <lambda>3Backend.create_test_serialisation.<locals>.<lambda>  s    rCLL/@r<   )keyc              3  h   #    U  H(  n[        U[        R                  5      (       d  M$  Uv   M*     g 7frq   )r   r   r  r   s     r=   r  4Backend.create_test_serialisation.<locals>.<genexpr>  s!     "]jJq%J[J[<\11js   #2	2zBad object in test command.c              3     >#    U  H3  n[         R                  R                  TUR                  5       5      v   M5     g 7frq   )r   r   r   r*  )r  r  env_build_dirs     r=   r  r    s,     -tcs^_bggll=!,,..Y.Ycss   ;>LD_LIBRARY_PATHr,  DYLD_LIBRARY_PATH)Bsortedget_exer   r   r   r  r   r   r   r   r   r  r   r  r  r   r  r   HOSTis_cross_buildr  r  r  r  r  r   get_transitive_build_target_depsr  r   r  r   Targetr  r  r   r   r   r  r  rw  r,   construct_target_rel_pathsr   r   copydeepcopyr   r  r9  prepend	is_darwinr   get_namer   r   r  r   r   r   r   r   rC  r>  rN  ro   r   )r\   testsarrr  r  r  test_for_machiner  is_crossr   r.   r  r   r   r   t_envld_lib_path_libsr>   r  ld_lib_pathr  tsr  s                         @r=   create_test_serialisation!Backend.create_test_serialisation  s   )+#@AA))+C#x7788oo'ww||D$4$4$B$B$DdF^F^_bFcde# 1 183K3KLMM#&??  $1#6#6  ZZa!2!233}}(:(::+8+=+=(	   ''667GHH**::<K&&//@G!!##w'8'8':':oqc5#5#566"&s'K'K'M"NK""199-"""]ajj"]]"@@R $&H+.qyy>G#u||,,C ZZa..KKN5#:#:;;KK)a//T%5%5%C%C%EqGXGXY]YjYjGklAOOA&3''OOA&ELL%2I2I#JKKOOD$C$CAyy$QR8#;#;<<OOAMMO4()FGG!  , MM!%%(E%%''0A0A0C0C?Bu  A!!U%6%677!"!4!4!6A)!U-@-@AA 0 4 4Q 7 "7 ! !% 0 0 > > @*--tcs-t*tMM"3T+5FL((**&94;LcR"1::<##.0@0@0Q0Q0S#$==(#$==!))QYY#.

AJJ#-cELL%BYBY3Z#[#-c53C3C#D8?#@1AHHJ#@#'#3#3#<#<#D#D#$99	.B JJrNo Bp 
	 $As   [+.c                P    [         R                  " U R                  U5      U5        g rq   )r  r  r  )r\   r  r  s      r=   r   Backend.write_test_serialisation  s    D22598Dr<   c                "   U R                  U5      n[        U[        R                  5      (       a  Uc  U=(       d    Sn[        U[        R                  5      (       a  UR                  5       /nOA[        U[        R                  [        R                  45      (       d   eUR                  5       nU Vs/ s H"  n[        R                  R                  X55      PM$     nnUb  [        R                  R                  U5      (       d   eU Vs/ s H;  n[        R                  R                  U R                  R                  5       U5      PM=     nnU Vs/ s H"  n[        R                  R                  XR5      PM$     nnU$ s  snf s  snf s  snf Nr3  )r  r   r   rC  r  r  r  r  r  r   r   r   r<  r   r   r  )r\   r  r   rU  outputsr  s         r=   r  "Backend.construct_target_rel_paths  s-   ((+
a))**w#*sJa**++~~'(Ga%"4"4e6M6M!NOOOOmmoG8?@1277<<
.@77==))))RYZRYQrww||D$4$4$B$B$DaHRYGZ<CDGqrwwq2GGD A [Ds   5)FAF)Fc                ^   U R                   R                  nUc}  U R                  R                  R                  R                  [        S5      5      n[        U[        5      (       d   S5       eU(       a!  [        R                  R                  US5      nOg [        R                  R                  U R                  R                  5       S5      n[        R                  R                  U R                  R                  5       U5      n[        R                  R                  U R                  R                  5       [        R                  R                  U5      5      n[        R                  R                  SU5      n[        R                  R                  S[        R                  R                  U5      5      nSSU R                   R                  R!                  5        V	V
s0 s H  u  pXR#                  5       _M     sn
n	S.n[%        USS	S
9 nUR'                  [(        R*                  " U5      5        S S S 5        UR,                  R/                  [1        XEUS SSSS95        U R                   R                  R3                  5        H  nUR5                  5        Ht  u  pN[        R                  R                  Xn5      n[        R                  R                  X5      nUR,                  R/                  [1        XEUS UR6                  SSS95        Mv     M     g s  sn
n	f ! , (       d  f       N= f)N
licensedirrp  z
depmf.jsonr   zdependency manifestz1.0)r[   ro   projectsrs  rt  ru  r   develdepmf)r   r   )r   dep_manifest_namer   rN  rO  rP  r   r   r,   r   r   r   r   
get_prefixrQ  dep_manifestr  to_jsonrz  r  jsondumpsrv   rw  r   r  license_mappingr   )r\   r>   
depmf_path
option_dir	ifilename	ofilenameodirnamer   out_dirr  r  mfobjr  mr   s                  r=   generate_depmf_installBackend.generate_depmf_install  s8   ZZ11
))22;;II)T`JabJj#..:
:.WW\\*lC
GGLL!1!1!?!?!A<P	GGLL!1!1!<!<!>
K	77<< 0 0 ; ; =rwwz?Z[77<<
J7'',,z277??:+FG.59=9P9P9V9V9XY9Xan9XY[)S73qGGDJJu%& 4 	
oiHdB*1WF 	G((//1A#$#4#4#6	GGLL8	77<<6oiHd./llSZ\ ] $7 2 Z33s   "L
&L
L,c           
        [        U R                  R                  5        Vs/ s H$  n[        [	        U R
                  5      U-  5      PM&     sn5      nU R                  R                  5       (       a/  UR                  U R                  R                  R                  5        UR                  U R                  R                  R                  5        UR                  S5        U R                  U5        [        U5      $ s  snf )z[List of all files whose alteration means that the build
definition needs to be regenerated.zmeson-private/coredata.dat)r   r   get_build_def_filesr,   r	   r  r   r  r  rN  cross_filesconfig_filesr  check_clock_skewr  )r\   dfr  s      r=   get_regen_filelistBackend.get_regen_filelist  s     %)%5%5%I%I%KM%Kr tD$5$56;<%KM N**,,KK((11==>D$$--::;-.d#DzMs   +C>c                   U R                  5       n[        U R                  R                  5       U R                  R	                  5       U5      n[
        R                  R                  U R                  R                  5       S5      n[        US5       n[        R                  " X$5        S S S 5        g ! , (       d  f       g = f)Nzregeninfo.dumpr  )r7  rD   r   r  r   r   r   r   r  rz  r  r  )r\   r  	regeninfor  r  s        r=   generate_regen_infoBackend.generate_regen_info  s    &&(d..==?"..<<>"$	 77<< 0 0 @ @ B 02(D!QKK	% "!!s   B22
C c                &   SS K nUR                  5       nU Hw  n[        R                  R                  U R                  R                  5       U5      n[        R                  R                  U5      nXc-
  nUS:  d  Mf  [        SU SUS S35      e   g )Nr   gMbP?zClock skew detected. File z has a time stamp z.4fzs in the future.)timer   r   r   r   r   getmtimer   )r\   	file_listr>  nowr  absfftimedeltas           r=   r5  Backend.check_clock_skew)  s     	iikA77<< 0 0 > > @!DDGG$$T*EKE u}$'A$GYZ_`cYddt%uvv r<   c                    [        U[        R                  5      (       aJ  [        R                  R                  U R                  R                  5       U R                  U5      5      /nU$ UR                  5       nU$ rq   )
r   r   r  r   r   r   r   r   r  r  )r\   btr  s      r=   build_target_to_cmd_array!Backend.build_target_to_cmd_array9  sa    b%++,,77<< 0 0 > > @$BZBZ[]B^_`C 
 .."C
r<   c                r    / nU H.  nUS:X  a  X2R                  5       -  nM  UR                  U5        M0     U$ )Nz@EXTRA_ARGS@)get_extra_argsrw  )r\   r  rM  
final_argsr  s        r=   replace_extra_argsBackend.replace_extra_args@  s@    "$
AN"4466
!!!$	 
 r<   c           	     b   / n[         R                  " S5      nU H  nUR                  U5      nUbh  [        UR	                  S5      5      nSU S3n	UR                  U	[        R                  R                  X#U   5      5      nUR                  U5      nUb  Mh  UR                  U5        M     U$ )Nz@OUTPUT(\d+)@rL   z@OUTPUTr  )
r=  compilesearchr   groupr?  r   r   r   rw  )
r\   r  private_diroutput_listnewargsregexr  r.  indexrd  s
             r=   replace_outputsBackend.replace_outputsI  s    !

+,CS!A-AGGAJwa(kk#rww||KUAS'TULL%	 -
 NN3  r<   c                    [        5       nU R                  R                  5       R                  5        H  u  p#UR                  (       d  M  X1U'   M     U$ rq   )r   r   get_targetsr  build_by_default)r\   r  r   bs       r=   get_build_by_default_targets$Backend.get_build_by_default_targetsV  sF    WbWdzz--/557GD!!! t 8 r<   c                   [        5       nU(       a  U R                  R                  5       OU R                  R                  5       nU GH  nUR                  n[        U[        R                  [        R                  45      (       a  XRUR                  5       '   UR                   HF  n[        U[        R                  [        R                  45      (       d  M4  XbUR                  5       '   MH     UR                   HU  n[        U[        R                  [        R                  [        R                  45      (       d   eXrUR                  5       '   MW     GM     U$ rq   )r   r   r  r  r  r   r  r  r>  r   r   r  )r\   	benchmarkr  rr   r  r  r  r  s           r=   get_testlike_targetsBackend.get_testlike_targets^  s    U`Ub1:$**++-

@T@T@VA%%C# 2 2E4E4EFGG'*szz|$zz!#(:(:E<M<M'NOO'*szz|$ " yy!#(:(:E<M<MuOfOf'ghhhh'*szz|$ !  r<   c                    / nUR                  5        Hc  nU R                  R                  U5      (       d  M%  UR                  [        R
                  R                  U R                  U5      U5      5        Me     U$ rq   )r  r   
is_libraryrw  r   r   r   r  )r\   generated_sourcelibsr  s       r=   .get_custom_target_provided_by_generated_source6Backend.get_custom_target_provided_by_generated_sourcen  s`    !--/A**1--BGGLL)<)<=M)NPQRS 0 r<   c                    / nUR                  5        HD  n[        U[        R                  5      (       d  M$  UR	                  U R                  U5      5        MF     U$ rq   )get_generated_sourcesr   r   r  r  rh  )r\   r   rg  r  s       r=   $get_custom_target_provided_libraries,Backend.get_custom_target_provided_librariesv  sN    --/Aa!3!344KKKKANO 0 r<   c           	     >   / nUR                  5        GHv  n[        U[        5      (       a8  [        R                  R                  U R                  UR                  U5      /nGO[        U[        R                  5      (       a  U R                  U5      /nGO[        U[        R                  [        R                  45      (       aO  UR                  5        Vs/ s H2  n[        R                  R                  U R                  U5      U5      PM4     nnGO[        U[        R                  5      (       aN  UR                  5        Vs/ s H2  n[        R                  R                  U R!                  U5      U5      PM4     nnO[        U[        R"                  5      (       a  U R%                  U5      nOy[        U[&        R(                  5      (       a>  UR+                  5       (       d   S5       eUR                  c   S5       eUR                  /nOUR-                  U R                  5      /nUR.                  (       aH  U Vs/ s H;  n[        R                  R                  U R0                  R3                  5       U5      PM=     nnX$-  nGMy     U$ s  snf s  snf s  snf )z
Custom target sources can be of various object types; strings, File,
BuildTarget, even other CustomTargets.
Returns the path to them relative to the build root directory.
zThis shouldn't be possiblerp  )get_sourcesr   r,   r   r   r   r  subdirr   r  r  r  r  r  get_custom_target_output_dirGeneratedListr]  r  r  r   r   r  r  absolute_pathsr   r   )r\   r   r  r  r   rf  r  s          r=   get_custom_target_sources!Backend.get_custom_target_sources  s    ##%A!S!!d&7&7JKAu001111!45A 2 2E4K4KLMMXYXeXeXghXgSTd&G&G&JANXghAu2233WXWdWdWfgWfRSd&A&A&&I1MWfgAu5566//2Ax7788wwyy>">>yvv)5:5)**4+<+<=>$$TYZTYqd&6&6&D&D&FJTYZMD' &(  ig [s   9J9JAJc                   / nUR                    GHI  n[        U[        R                  5      (       a  U(       aS  UR	                  UR                  U R                  R                  5       U R                  R                  5       5      5        M}  UR	                  UR                  U R                  5      5        M  U(       aU  UR	                  [        R                  R                  U R                  R                  5       UR                  U5      5        GM  UR	                  [        R                  R                  U R                  UR                  U5      5        GML     U$ rq   )depend_filesr   r   r   rw  r(  r   r  r   r  r  r   r   r   rp  )r\   r   rs  r  r  s        r=   get_target_depend_filesBackend.get_target_depend_files  s    $$A!X]]++!KK0@0@0O0O0Q040@0@0N0N0P!R S KK 1 1$2C2C DE!KKT-=-=-L-L-NPVP]P]_` abKKT->->q QR % r<   c                $    U R                  U5      $ rq   )r  r  s     r=   rq  $Backend.get_custom_target_output_dir  s     ""6**r<   c                @    [         R                  R                  U5      $ rq   )r   r   r+  )r\   rA  s     r=   get_normpath_targetBackend.get_normpath_target  s    ww''r<   c                  / nUR                  5        H  n[        U[        R                  [        R                  45      (       d  M4  U R                  U R                  U5      5      nU(       d  SnU(       a8  [        R                  R                  U R                  R                  5       U5      nXd;  d  M  UR                  U5        M     U$ r  )rk  r   r   r  r  r}  rq  r   r   r   r   r   rw  )r\   r   r0   r(  custom_target_include_dirsr  idirs          r=   get_custom_target_dirsBackend.get_custom_target_dirs  s    24"--/A a%"4"4e6M6M!NOO++D,M,Ma,PQDww||D$4$4$B$B$DdK5*11$7 0 *)r<   c               `    / nU R                  XUS9 H  nXBR                  US5      -  nM     U$ )Nr'  F)r  r,  )r\   r   r0   r(  incsr  s         r=   "get_custom_target_dir_include_args*Backend.get_custom_target_dir_include_args  s>     ,,V],[A--a77D \r<   c           	     R   U R                   nSnU R                  U5      nU(       al  U R                  R                  5       nU R                  R	                  5       n[
        R                  R                  U R                  R	                  5       U5      nUR                  5        Vs/ s H"  n[
        R                  R                  XV5      PM$     nnU R                  U5      n/ n	UR                   GH  n[        U[        R                  5      (       a  XR                  U5      -  n	M8  [        U[        R                  5      (       aD  UR                  5       S   n
[
        R                  R                  U R                  U5      U
5      nGO[        U[         R"                  5      (       am  UR%                  U R                   5      nUR&                  (       d  U(       a8  [
        R                  R                  U R                  R	                  5       U5      nGO[        U[(        5      (       Ga:  SU;   a  UR+                  SU5      nSU;   a  UR+                  SU5      nSU;   a9  UR+                  S[
        R                  R                  X1R,                  5      5      nSU;   ad  UR.                  c  SUR0                  < S3n[3        U5      e[
        R                  R                  XQR.                  5      nUR+                  SU5      nS	U;   aZ  U R5                  U5      n[
        R6                  " US
S9  UR&                  (       d  U R9                  U5      nUR+                  S	U5      nO:[        U[:        R<                  5      (       a  O[?        SU S[A        U5       35      eU	RC                  U5        GM     [         RD                  " X5      n[         RF                  " X5      n	U	 Vs/ s H,  n[        U[(        5      (       a  UR+                  SS5      OUPM.     n	nXU	4$ s  snf s  snf )Nr3  r   z@SOURCE_ROOT@z@BUILD_ROOT@z@CURRENT_SOURCE_DIR@	@DEPFILE@zCustom target z/ has @DEPFILE@ but no depfile keyword argument.z@PRIVATE_DIR@Trn  z	Argument z is of unknown type r+  r(  )$r  rq  r   r  r   r   r   r   r  rt  commandr   r   r  rH  r  r   r   r  rs  r,   r?  rp  depfiler   r   r`  ry  r]  r   r   r  r[   rw  get_filenames_templates_dictsubstitute_values)r\   r   absolute_outputssource_root
build_rootr   r  r  inputsr  tmpr  	dfilenamepdirr  s                  r=   eval_custom_target_command"Backend.eval_custom_target_command  sI   
 ''
226:**99;K))779JWW\\$"2"2"@"@"BFKF4:4F4F4HI4Hq277<<*4HI//768A!U..//55a88Au1122 mmoa(GGLL!B!B1!EsKAx}}--%%d&7&78((,<T%5%5%C%C%EqIA As##"a'		/;?A!Q&		.*=A)Q.		"8"'',,{TaTa:bcA!#~~- .v{{o >2 2,S11 "V^^ DI		+y9A"a'::6BDKKt4!00#::6B		/48AAx7788"Yqc1Ed1gY#OPPJJqMQ  T 66vG((5& KNN#Qz!S'9'9qyys#q@#N##G JD Os   %)P&3P$c                j    SR                  S U R                  R                  5       S/-    5       5      $ )Nr  c              3  N   #    U  H  n[         R                  " U5      v   M     g 7frq   )shlexquote)r  r  s     r=   r  1Backend.get_introspect_command.<locals>.<genexpr>&  s     f0e1A0er  
introspect)r   r   r
  rz   s    r=   get_introspect_commandBackend.get_introspect_command%  s/    xxf0@0@0R0R0TXdWe0efffr<   c                   UR                   (       a  UR                   O[        R                  " 5       nUR                  (       a  UR	                  SU R
                  R                  5       /5        UR	                  SU R
                  R                  5       /5        UR	                  SUR                  /5        UR	                  SU R                  5       /5        U$ )NMESON_SOURCE_ROOTMESON_BUILD_ROOTMESON_SUBDIRMESONINTROSPECT)
r   r   EnvironmentVariablesdefault_envr   r   r  r   rp  r  )r\   r   r   s      r=   get_run_target_envBackend.get_run_target_env(  s    "JJfjjH,I,I,KGG'$*:*:*I*I*K)LMGG&)9)9)G)G)I(JKGGNV]]O4GG%(C(C(E'FG
r<   c                |   SSK Jn  U R                  R                  5       U R                  R	                  5       U R                  5       S.nU R                  R                   HX  nSR                  UR                  5      n[        R                  " SU< 35        U" X25      nUS:w  d  MH  [        SU SU S	35      e   g )
Nr
   )run_exe)r  r  r  r  zRunning postconf script r   zPostconf script 'z' failed with exit code r3  )scripts.meson_exer  r   r  r   r  r   postconf_scriptsr   r   r   logr   )r\   r  r   r  r   rcs         r=   run_postconf_scriptsBackend.run_postconf_scripts1  s    /$($4$4$C$C$E#'#3#3#A#A#C"&"="="?
 ,,A88AJJ'DHH/x89BQw$'9$?XY[X\\]%^__ -r<   c           
     8   U R                   R                  [        R                  S5      nUcM  U R                   R	                  5       (       a  [
        R                  " S5        O[        R                  S   S   /nU R                   R                  R                  R                  [        S5      5      n[        U[        [        45      (       d   S5       e[!        U R                   R#                  5       U R                   R%                  5       U R                   R'                  5       U R                   R)                  5       UUU R                   R+                  5       S/-   U R                   R                  R,                  5      nU R/                  U5        U R1                  U5        U R3                  U5        U R5                  U5        U R7                  U5        U R9                  U5        U R;                  U5        U R=                  U5        U R?                  U5        U$ )Nr   zFCross file does not specify strip binary, result will not be stripped.r   rm   rp  r  ) r   lookup_binary_entryr   r  r  r   r  r   defaultsrN  rO  rP  r   r   r,   r   rh   r  r   r!  
get_libdirr
  ro   r/  generate_target_installgenerate_header_installgenerate_man_installgenerate_emptydir_installgenerate_data_installgenerate_symlink_installgenerate_custom_install_scriptgenerate_subdir_install)r\   rl   umaskr>   s       r=   create_install_dataBackend.create_install_data?  s   $$889K9KWU	..00ef $__W5a89	  ))22@@?A[\%#s,,8j8,((779((668((335((335!((::<~M((1199; 	##A&$$Q'$$Q'!!!$&&q)""1%%%a(++A.$$Q'r<   c                
   [         R                  R                  U R                  R	                  5       S5      n[        US5       n[        R                  " U R                  5       U5        S S S 5        g ! , (       d  f       g = f)Nzinstall.datr  )	r   r   r   r   r  rz  r  r  r  )r\   install_data_filer  s      r=   create_install_data_files!Backend.create_install_data_files^  sV    GGLL)9)9)I)I)K][#T*eKK002E: +**s   &A44
Bc                `   U R                   R                  5       n[        X0R                   R                  5       5      n[        X0R                   R	                  5       5      n[        X0R                   R                  5       5      nU R                   R                  R                  R                  [        S5      5      n[        U[        5      (       d   S5       e[        X75      nU(       a  [        X2[        U5      R                  5      O
[        X15      n	XIR                  ;   a  gXYR                  ;   a#  U	R                  S;   a  gU	R                  S;   a  gOBXiR                  ;   a  gXR                  ;   a  gSU	R                  ;   a  g	S
U	R                  ;   a  g
[         R"                  " SU	5        g )N	localedirrp  runtime>   r7  .pcr  >   r8  .dlli18nzinstalled-testsr  	systemtapzFailed to guess install tag for)r   r!  r	   
get_bindirr  get_includedirrN  rO  rP  r   r   r,   r   parentsri  r0  r   r  )
r\   r   r   rj   r  rk   incdir_ldirr  	dest_paths
             r=   guess_install_tagBackend.guess_install_tagc  sY   !!,,.f..99;<f..99;<f..==?@  ))22@@;AWX%%%1z1%'	>DDe)9)9:$vJ]	&&&(((=0!!_4  5(((+++)//1IOO+

4i@r<   c                   U R                   R                  5       R                  5        GH_  nUR                  5       (       d  M  UR	                  5       u  p4n[        U5      [        UR                  5       5      pvUSU1;  a6  Sn[        UR                  UR                  XrR                  5       U5      5      e[        UR                  5      U:X  d   eUR                  5       n	US   n
US   n[        U[         R                  5      (       Ga  [        U[         R                  5      (       + nU=(       a    U R                  US5      n[        U[         5      (       d   S5       eU
SLGa  UR                  S   =(       d#    [        U[         R                  5      (       a  SOSnUR#                  UR$                  5      n['        U R)                  U5      U
UXUR*                  UR,                  XR.                  XS	9nUR0                  R3                  U5        UR5                  5        HZ  u  nnn[6        R8                  R;                  U
U5      n[=        UUXR.                  U5      nUR>                  R3                  U5        M\     [        U[         R@                  [         RB                  [         RD                  45      (       Ga8  URG                  5       (       a  U(       a  U
nOU RH                  RK                  5       n['        U RM                  U5      UUS0 [O        5       S
U	UR.                  [        U[         RB                  5      SS9nUR0                  R3                  U5        U(       d  URQ                  5       (       a|  [6        R8                  R;                  U RS                  U5      URQ                  5       5      n['        UU
US0 [O        5       S
XR.                  SSS9nUR0                  R3                  U5        US:  a  [U        UR                  5       SS  USS  USS  UR                  SS  5       H|  u  nnnnUSL a  M  [6        R8                  R;                  U RS                  U5      U5      n['        UUUS0 [O        5       S XR.                  US9
nUR0                  R3                  U5        M~     GM  GM  [        U[         RV                  5      (       d  GM  US:X  a  US:  a  U
SLa  [U        UR                  5       UR                  5       H  u  nnU=(       d    U RY                  UU
5      n[6        R8                  R;                  U RS                  U5      U5      n['        UXS0 [O        5       S U	UR.                  URZ                  (       + US9nUR0                  R3                  U5        M     GM  GM  [U        UR                  5       X4UR                  5       H  u  nnnnUSL a  M  U=(       d    U RY                  UU5      n[6        R8                  R;                  U RS                  U5      U5      n['        UUUS0 [O        5       S U	UR.                  URZ                  (       + US9nUR0                  R3                  U5        M     GMb     g )NrL   zTarget {!r} has {} outputs: {!r}, but only {} "install_dir"s were found.
Pass 'false' for outputs that should not be installed and 'true' for
using the default installation directory for an output.r   r   rp  Fr  r  )r   r   r   )r   r   Tr   ).r   r[  r  should_installget_install_dirr  r  r   formatr   install_tagget_custom_install_moder   r  rA  r  r   get_link_deps_mappingrj   r   r  r   r   r   rr   rw  get_aliasesr   r   r   r   rw   r9  SharedModulerC  r:  r   get_import_lib_dirrG  r   r   r  zipr  r  r\  )r\   r>   r  outdirsinstall_dir_namescustom_install_dirnum_outdirsnum_outr.  r   first_outdirfirst_outdir_namer   should_stripr   mappingsr  aliastor  implib_install_dir
debug_fileoutputr   r   r  s                             r=   r  Backend.generate_target_install~  s   '')002A##%%=>=N=N=P:G(:#&w<Q]]_1E1g,.N %QXXaffg}}P[%\]]q}}%000446L"1:L 1! 4 !U..// !+1e.A.A BB	(OT-C-CAw-O!,55AzA5  u,--*l*QH[H[:\:\wbkC 66qxx@H)$*B*B1*E|*;*6!BXBX*+//<.1	HA
 II$$Q'*+--/r3 "\5 A.r5,VYZ

))!, +:
 "!e&9&95;M;MuO_O_%`aa 00221 6B 2595E5E5X5X5Z 2 1$2V2VWX2Y2DFW27SUB23,,TUW\WiWiIj6=	!?A
 II,,Q/+0D0D0F0F)+d6I6I!6LaNbNbNd)eJ 1*l2C27SUB2>;?W	!NA
 II,,Q/?<?PQPR@SU\]^]_U`bstutvbwyz  zG  zG  HI  HJ  zK  =L8S!U?$GGLL)<)<Q)?H-aeRQTQVX\.:LL257 		((+ =L # Au1122 !#!#50+.q}}+NKFC"%"U)?)?)UC "T-@-@-CV LA 1!\27SUD,23,,QM_M_I_69!;A II,,Q/ ,O 1 =@QXmnmzmz<{8S!U?$!KT%;%;FF%KGGLL)<)<Q)?H-a.3Rl./llI[I[E[257 		((+ =|c 3r<   c                    U R                   R                  Ul        UR                   HF  nUR                  (       a  M  [        R                  " SSR                  UR                  5      5        MH     g )Nz/Failed to guess install tag for install script:r  )r   rx   r   r   r  r   r   )r\   r>   r  s      r=   r  &Backend.generate_custom_install_script  sL     JJ66""A555

LchhWXWaWaNbc #r<   c                   U R                   R                  5       nU R                  R                  5       nU R                   R	                  5       nU R                   R                  5       nU H  nUR                  5       =pxUcW  UR                  5       n	U	c  UnSnO?[        R                  R                  X)5      n[        R                  R                  SU	5      nUR                  5        H^  n
U
R                  XE5      n[        XXR                  5       UR                  SUR                   S9nUR"                  R%                  U5        M`     M     g )Nz{includedir}r  )r   r   )r   r  r   get_headersr  r   get_custom_install_dirget_install_subdirr   r   r   ro  r(  r   r  r   r   rs   rw  )r\   r>   incrootrs   srcdirbuilddirhr   r   rp  r  abspathr  s                r=   r  Backend.generate_header_install  s   ""113**((*!!002##113A#$#;#;#==F~--/>$F"0KWW\\':F"$'',,~v"FK]]_//&;#G[B[B[B]_`_k_kqx  KL  K\  K\  ]		  # % r<   c                   U R                   R                  5       nU R                  R                  5       nU GH  nUR	                  5        GH  nUR                  S5      S   nUR                  5       nUcc  UR                  (       a/  [        R                  R                  SUR                  SU-   5      nO#[        R                  R                  SSU-   5      nUR                  nUR                  (       a  UR                  SUR                   3S5      nUR                  U R                   R                  5       U R                   R                  5       5      n	[        R                  R                  U[        R                  R!                  U5      5      n
U
R                  SU5      n[#        XXR%                  5       UR&                  SS9nUR(                  R+                  U5        GM     GM     g )Nr3  r  z{mandir}rt   r   r  )r   
get_mandirr   get_manro  r/  r  localer   r   r   r   r?  r(  r  r   r   r   r  r   rt   rw  )r\   r>   manrootrt   r.  r  numrp  r   srcabsdstnamedstabsr  s                r=   r  Backend.generate_man_install  s_   ""--/jj  "A]]_ggcl2&113>xx!#j!((ECK!P!#j%#+!F88!MMAahhZ."=E)9)9)H)H)JDL\L\LjLjLlm'',,vrww/?/?/FG W=#FG=V=V=XZ[ZfZflqrQ % r<   c                4   U R                   R                  5       nU Hx  nUR                  =(       d    U R                  UR                  5      n[        UR                  UR                  UR                  U5      nUR                  R                  U5        Mz     g rq   )
r   get_emptydirr  r  r   r   r   r   ru   rw  )r\   r>   ru   er   r  s         r=   r  !Backend.generate_emptydir_install-  si    +/::+B+B+DA--A4#9#9!&&#ACcJAJJa  r<   c                @   U R                   R                  5       nU R                  R                  5       nU R                  R	                  5       nU GHI  n[        U[         R                  5      (       d   eUR                  nUR                  n[        UR                  UR                  5       H  u  p[        U[        R                  5      (       d   e[        R                  R!                  Xi5      n
[        R                  R!                  Xy5      nUR"                  =(       d    U R%                  U
5      n['        UR)                  X45      XUR*                  UR,                  XR.                  UR0                  S9nUR2                  R5                  U5        M     GML     g )N)r   r   r   )r   get_datar   r  r   r   Datainstall_dirinstall_dir_namer  r2   renamer   r   r   r   r   r  r  r   r(  r   r   r   r   rv   rw  )r\   r>   rv   r  r  derp  subdir_namesrc_filedst_namedst_absdstdir_namer   r  s                 r=   r  Backend.generate_data_install4  s,   zz""$!!002##113Bb%**----^^F--K&)"**bii&@"!(HMM::::'',,v8 ggll;AnnG(>(>w(G#H$:$:6$Lg$&OOR]]WcWc464F4FH a  'A	 r<   c                   U R                   R                  5       nU H  n[        U[         R                  5      (       d   eUR                  n[
        R                  R                  XCR                  5      nUR                  =(       d    U R                  U5      n[        UR                  XTUR                  U5      nUR                  R                  U5        M     g rq   )r   get_symlinksr   SymlinkDatar
  r   r   r   r   r  r  r   r   r   rw   rw  )r\   r>   linksr  r
  name_absr   r  s           r=   r   Backend.generate_symlink_installF  s    +/::+B+B+DAa!2!23333--Kww||K8H--C4#9#9(#CC"188XALLRUVAJJa  r<   c                   U R                   R                  5        GHH  nUR                  (       a  U R                  R	                  5       nOU R                  R                  5       n[        R                  R                  UUR                  UR                  5      R                  S5      n[        R                  R                  U R                  R                  5       UR                  5      n[        R                  R                  SUR                  5      nUR                  UR                  :w  a  UR                  nUR                  (       dz  [        R                  R                  U[        R                  R!                  U5      5      n[        R                  R                  U[        R                  R!                  U5      5      nUR"                  =(       d9    U R%                  [        R                  R                  UR                  S5      5      n['        XEXbR(                  UR*                  UR,                  UUR.                  S9nUR0                  R3                  U5        GMK     g )Nr(  r   dummy)r   )r   get_install_subdirsfrom_source_dirr   r  r   r   r   r   source_subdirinstallable_subdirrstripr!  r
  r  strip_directoryr   r  r  r   r   r   r   r   ry   rw  )	r\   r>   sdfrom_dirsrc_dirdst_dirr  r   r  s	            r=   r  Backend.generate_subdir_installP  s   **002B!!++::<++99;ggll8#%#3#3#%#8#8::@&+  ggll4#3#3#>#>#@#%>>3Gww||J?H~~!4!44..%%'',,w0@0@0IJ77<<"''2B2B72KL..aD$:$:277<<X_;`$aC!'Hoorzz[][h[hjm242D2DFA$$Q'' 3r<   c           
        [        U[        R                  [        R                  45      (       Ga  UR                  n/ nU GH  n[        U[
        R                  5      (       a+  XER                  U R                  U R                  5      /-  nMN  [        U[        5      (       a0  U[        R                  R                  U R                  U5      /-  nM  [        U[        R                  [        R                  45      (       d  M  XER                  5        Vs/ s H<  n[        R                  R                  U R                  UR                  5       U5      PM>     sn-  nGM!     U Vs/ s H"  n[        R                  R!                  U5      PM$     nn/ n[        U[        R                  5      (       Ga  UR"                  n	U	 H  n[        U[
        R                  5      (       a+  XR                  U R                  U R                  5      /-  nMM  [        U[        5      (       a  X/-  nMi  [        U[        R                  [        R                  45      (       a  XR                  5       -  nM  [        U[$        R&                  5      (       a  XR)                  5       -  nM  [+        S[-        U5      R.                   S35      e   SU/ U/ S./$ / $ s  snf s  snf )a  
Returns a list of source dicts with the following format for a given target:
[
    {
        "language": "<LANG>",
        "compiler": ["result", "of", "comp.get_exelist()"],
        "parameters": ["list", "of", "compiler", "parameters],
        "sources": ["list", "of", "all", "<LANG>", "source", "files"],
        "generated_sources": ["list", "of", "generated", "source", "files"]
    }
]

This is a limited fallback / reference implementation. The backend should override this method.
zType "z;" is not supported in get_introspection_data. This is a bugunknown)r-   r0   r1   r2   r3   )r   r   r  r  r2   r   r   r(  rF   rG   r,   r   r   r   r  r*  r+  r  r   r   r  r  r[   r6   )
r\   	target_idr   source_list_rawsource_listjrT  r  r0   tmp_compilers
             r=   get_introspection_dataBackend.get_introspection_dataf  s3    fu1153D3DEFF$nnOK$a//OODOOT^^$T#UUK3''BGGLL!$D#EEKE$6$68I8I#JKK]j]j]l#m]lXYBGGLLQR$S]l#mmK % 9DD1277++A.KD$&H&%"4"455%~~%A!!X]]33 __T__dnn%U$VV#As++ C#A(9(95;M;M'NOO MMO3#Ax'?'?@@ MMO3*VDG4D4D3E  FA  ,B  C  C & &$ &%'   	5 $nDs   AK()Kc                   [        5       n[        5       nU R                  R                  [        R                     nU R
                  R                  5       R                  5        GHy  nUR                  [        R                  Ld  UR                  5       (       d  M8  UR                  5       (       d  UR                  5       (       aP  [        U[
        R                  [
        R                  45      (       a!  UR                  U R!                  U/ 5      5        UR#                  5       S   (       a  M  [$        R&                  R)                  U R                  R+                  5       U R-                  U5      5      n[        U[
        R                  5      (       a  UR/                  U5        GMF  [        U[
        R0                  5      (       d  GMh  UR/                  U5        GM|     U R                  R3                  X!5      $ )Nr
   )r   r   r  r   r  r   r[  r  r  r  r  r  r   rC  r  r  r  r  r   r   r   r   r  r  r9  get_env_for_paths)r\   r   library_pathshost_machiner  tdirs         r=   
get_devenvBackend.get_devenv  sq   e''001C1CD'')002A}}M$6$66a>N>N>P>P''))\-C-C-E-E:VWZ_ZjZjlql~l~Y  LA  LA $$T%G%G2%NO  "1%77<< 0 0 > > @$BUBUVWBXYD!U--.. %Au2233 !!$'1 34 11-MMr<   c                j   U R                  X5      nU(       a  XrR                  X45      -  nXrR                  U5      -  nXpR                  X5      -  nXpR	                  X5      -  nXrR                  5       -  nXpR                  UR                  UR                  5       5      5      -  nUb  Xu-  nXv/-  nU$ )z
The VS and Xcode backends need the full set of arguments for making a
custom build rule. This is a convenience method to convert a Compiler
to its arguments, for later concatenation.
)	r  get_dependency_gen_argsget_output_argsr0  r4  get_compile_only_argsr  rK  rb  )r\   r   r0   r  r  extrasinputr  s           r=   compiler_to_generator_args"Backend.compiler_to_generator_args  s     44VF88IIH,,V4444VFF33FEE2244 	**6+@+@AVAVAX+YZZ HGr<   c                n    [          H+  nXR                  R                  R                  U   ;   d  M+    g   g)NTF)r   r   rN  r  )r\   langnamer  s      r=   have_languageBackend.have_language  s1    (K++44>>{KK ) r<   c                   [         R                  " UR                  5       5      nUR                  5       nU R	                  X5      n[
        R                  " XgUR                  5       -   U/SUS9n	U	R                  X0R                  5      $ )zr
Some backends don't support custom compilers. This is a convenience
method to convert a Compiler to a Generator.
z@PLAINNAME@.d)r  r   )
r   r   r   r  r=  r   	Generator	to_nativeprocess_filesr   )
r\   r   r0   r2   output_templr   r  r  r  	generators
             r=   compiler_to_generatorBackend.compiler_to_generator  s|     &&x'7'7'9:$$&226DOOC0B0B0D)D%1NO,35	 &&w0@0@AAr<   c                    [         R                  " SUR                  5      [         R                  " SUR                  5      -   nU R	                  XR
                  UUR                  UR                  5      $ )N_ALL_SOURCES_TYPE)r{  r|  r2   	generatedrI  r0   rG  r   )r\   r   all_sourcess      r=   compile_target_to_generator#Backend.compile_target_to_generator  s[    ff0&..AAFFK^`f`p`pDqq))&//;*0*=*=v~~O 	Or<   c                    [        U[        R                  5      (       a  gU R                  US5      nUS:X  a  gUS:X  a  gUS:X  a  UR                  S:g  $ [        SU 35      e)	NFunityonToffsubprojectsr   z1Internal error: invalid option type for "unity": )r   r   r:  r  r   r   )r\   r   vals      r=   rV  Backend.is_unity  sl    fe1122$$VW5$;%<-$$**PQTPUVWWr<   c                    [        U[        5      (       a  [        X!R                  S9nO#[        U[        5      (       a  UnO[	        S5      eU R
                  R                  R                  X5      $ )N)r   z$Internal error: invalid option type.)r   r,   r   r   r   r   rN  get_option_for_target)r\   r   r   r  s       r=   r  Backend.get_target_option  sZ    dC  D->->?Ci((C#$JKK((>>vKKr<   )r   rG   r  r   r   r   rF   r  )r   T.Optional[build.Build]r   T.Optional['Interpreter'])FN)r  r   r	  T.Optional[T.Dict]r_   r]  )r  .T.Union[build.Target, build.CustomTargetIndex]r  r   r_   r,   )r   r^  r_   r,   )r   build.BuildTargetr_   r   )r   r_  r0   
'Compiler'r(  r   r_   r/   )r   r^  r_   r   )r  build.TargetrT  ra  r_   r,   )r   ra  r_   r,   )r   GT.Union[build.BuildTarget, build.CustomTarget, build.CustomTargetIndex]r_   r,   )r   rb  rc  zIT.Union[build.CustomTarget, build.CustomTargetIndex, build.GeneratedList]rd  r,   r_   r,   )r   rb  ri  r,   rj  r   r_   zmesonlib.File)r   r_  r|  r,   r_   zT.List[mesonlib.File])r  r,   r  r,   r_   r,   )r   )r   r_  r  r,   r_   4T.Tuple[T.List[str], T.List[build.BuildTargetTypes]])r  zbuild.ExtractedObjectsr_   r/   )r   r_  r  z8T.Sequence[T.Union[str, 'File', build.ExtractedObjects]]r  r,   r_   rc  )r   r_  r_   r   )r   r_  r_   r/   )	NNNNNFNFN)r  z_T.Sequence[T.Union[programs.ExternalProgram, build.BuildTarget, build.CustomTarget, File, str]]r   r   r  %T.Optional[T.List[build.BuildTarget]]r  r   r  r   r   )T.Optional[mesonlib.EnvironmentVariables]r  r   r   r   r   r   r  zT.Optional[T.Dict[str, str]]r_   z'ExecutableSerialisation')NNNNFNFF)r  z\T.Union[str, mesonlib.File, build.BuildTarget, build.CustomTarget, programs.ExternalProgram]r   zhT.Sequence[T.Union[str, mesonlib.File, build.BuildTarget, build.CustomTarget, programs.ExternalProgram]]r   r   r  rd  r  r   r  r   r  r   r   re  r  r   r   r   r_   zT.Tuple[T.List[str], str])r_   zT.Tuple[str, str])r   r_  r_   z9T.Tuple[T.Union['Compiler', 'StaticLinker'], T.List[str]])r   r,   r_   r,   rq   )
r   r_  r0   r   rA  z'FileOrString'rB  r   r_   r,   )rY  z'build.ExtractedObjects'r_   r/   )r0   r`  r   r_  r_   r/   )r\  r,   rR  r/   r_   r,   )r   r_  r\  r,   rq  r,   r_   r,   )r  r/   r_   r/   )r   z'build.BuildTarget'r0   r`  r_   r/   )r   r_  r0   r`  r_   z'CompilerArgs')r0   r`  r  zT.List[build.Target]r_   r/   )r  r,   r_   r   )r   r_  r_   z
T.Set[str])r   zuT.Union[build.BuildTarget, build.CustomTarget, build.CustomTargetIndex, programs.ExternalProgram, mesonlib.File, str]r  zST.Sequence[T.Union[build.BuildTarget, build.CustomTarget, build.CustomTargetIndex]]r_   r/   )r  
T.BinaryIOr_   r~   )r  T.List['Test']r_   zT.List[TestSerialisation])r  rg  r  rf  r_   r~   )r  r^  r   r   r_   r/   )r>   rh   r_   r~   )r_   r/   r}   )r@  zT.Iterable[str]r_   r~   )rG  z4T.Union[build.BuildTarget, programs.ExternalProgram]r_   r/   )r  r/   rM  z'build.GeneratedList'r_   r/   )r  r/   rS  r,   rT  r/   r_   r/   )r_   zD'T.OrderedDict[str, T.Union[build.BuildTarget, build.CustomTarget]]')F)ra  r   r_   zBT.OrderedDict[str, T.Union[build.BuildTarget, build.CustomTarget]])rf  build.CustomTargetr_   'ImmutableListProtocol[str]')r   z.T.Union[build.BuildTarget, build.CustomTarget]r_   ri  )r   rh  r_   r/   )r   z.T.Union[build.CustomTarget, build.BuildTarget]rs  r   r_   r/   )rA  r,   r_   r,   )r   rh  r0   r`  r(  r   r_   r/   )r   rh  r  r   r_   zIT.Tuple[T.List[str], T.List[str], T.List[str | programs.ExternalProgram]]r`   )r   zbuild.RunTargetr_   r   )r_   rh   )r   r,   r   r   r_   r   )r)  r,   r   ra  r_   z!T.List['TargetIntrospectionData'])r_   r   )z@OUTPUT@r  Nz@INPUT@)r   r_  r0   r`  r  r,   r  zT.Union[str, None]r;  zT.Union[T.List[str], None]r<  r,   r_   r   )r@  r,   r_   r   )r   r_  r0   r`  r2   rL  rG  r,   r   z[T.Optional[T.List[T.Union[build.BuildTarget, build.CustomTarget, build.CustomTargetIndex]]]r_   build.GeneratedList)r   zbuild.CompileTargetr_   rj  )r   r_  r   zT.Union[str, OptionKey]r_   r&   )ar6   r7   r8   r9   r:   r   r   r
  r  r  r"  r%  r0  r4  rG  r   r  rW  rZ  r]  r`  re  rl  r  staticmethodr  r  r  r  r  r  r  r  r  r$  r4  rH  r  rg  rU  rw  rS  r  r  r  r  r  r  ra   r  r  r  r  r  r  r  r/  r7  r;  r5  rH  rM  rX  r^  rb  rh  rl  rt  rx  rq  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r.  r5  r=  rA  rI  rO  rV  r  r;   r4   r<   r=   r   r   	  s   **DP2T sw >`f uz 9 ty 8X0 t 7!^c tFaF]F F F F X&)X36X;HX(T H H3!U3
-!&^!58!=q!F   (,AE'+$(=A%*#'!;?TavTa$Ta ?Ta %	Ta
 "Ta ;Ta #Ta !Ta Ta 9Ta E^Tap 9=RV8<595:NR6;-2c$ (Pc$&5c$ +Pc$ '6	c$
 $3c$ /3c$ #Lc$ 04c$ '+c$ 8Qc$J) t  ,\ t7 7r"4 "  
l\0" t  4 t  4!9 P!9l!9q|!9FMHZxE&]8
&w   t  t : + t( ( 6;*.2*?J*( #(,8B,7 HMO$,O$@DO$UO$bg`>;
6|,|d$, *!!$!(,2hNB HRALHL09	-7AD,> ,F +.	 ?K	8 FJ	B(2B'8B -0B (C	B
 $7B$O

XLr<   r   )NN)r   r,   r   r[  r   r\  r_   T.Optional['Backend'])r   r,   r   r[  r   r\  r_   rl  )V
__future__r   collectionsr   dataclassesr   r   	functoolsr   	itertoolsr   pathlibr	   r  enumr$  r   r  r=  r  r  typingr{  r  r   r   r   r   r   r   r  r   r   r   r   r   r   r   r   r   r   r   r   optionsr   TYPE_CHECKING_typingr   arglistr   r   r   r    r   r!   r"   linkers.linkersr#   r$   r%   r&   typing_extensionsr'   r(   ListUnionr  r  rr  rL  r*   rW  rD   EnumrJ   rc   rh   r   r   r   r   r   r   r   r   r   r4   r<   r=   <module>r~     s   # # *       	  	          -     ??/&$)/.108qwwtU-?-?AXAXZ_ZmZm'mno') ' 4 
e  
499 < e   e= = =, eP P P( e      e- - - e       eJ J J8"J}L }Lr<   