
    -Ph                      d dl mZ d dlmZ d dlmZmZ d dlmZ d dl	m
Z
 d dlmZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZdd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZm Z m!Z! ddlm"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+ ddl,m-Z- ej.        ruddl/m0Z0 ddl1m2Z2 ddlm3Z3 ddl4m5Z5 ddl6m7Z7m8Z8 ddl9m:Z: ddlm;Z;m<Z< ddl,m=Z= d dl>m?Z?m@Z@ ejA        ejB        e"ejC        ejD        ejE        f                  ZF G d de?          ZGdZH ed           G d d                       ZI G d! d"ejJ                  ZK ed           G d# d$                      ZL ed           G d% d&                      ZM ed           G d' d(                      ZN ed           G d) d*                      ZO ed           G d+ d,                      ZP ed           G d- d.                      ZQ G d/ d0eP          ZR ed           G d1 d2                      ZSd@dAd;ZTd@dBd=ZU G d> d?          ZVdS )C    )annotations)OrderedDict)	dataclassInitVar)	lru_cache)chain)PathN   )build)dependencies)programs)mesonlib)mlog)LANGUAGES_USING_LDFLAGSdetectlang_suffixes)
FileMachineChoiceMesonExceptionMesonBugException
OrderedSetExecutableSerialisationEnvironmentExceptionclassify_unity_sourcesget_compiler_for_sourceis_parent_path)	OptionKey)ImmutableListProtocol)CompilerArgs)Compiler)Environment)InterpreterTest)StaticLinker)FileModeFileOrString)ElementaryOptionValues)	TypedDictNotRequiredc                  L    e Zd ZU ded<   ded<   ded<   ded<   ded<   ded	<   d
S )TargetIntrospectionDatastrlanguagezNotRequired[str]machineT.List[str]compiler
parameterssourcesgenerated_sourcesN__name__
__module____qualname____annotations__     [/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mesonbuild/backend/backends.pyr+   r+   3   sW         !!!!&&&&&&r:   r+   )dfortranvalaF)eqc                  .    e Zd ZU ded<   ded<   ded<   dS )	RegenInfor,   
source_dir	build_dirr/   depfilesNr4   r9   r:   r;   rA   rA   B   s0         OOONNNr:   rA   c                  >    e Zd ZdZdZdZdZedd	            Zdd
Z	dS )TestProtocolr      r
      stringr,   return'TestProtocol'c                    |dk    r| j         S |dk    r| j        S |dk    r| j        S |dk    r| j        S t	          d|           )Nexitcodetapgtestrustzunknown test format )EXITCODETAPGTESTRUSTr   )clsrI   s     r;   from_strzTestProtocol.from_strO   sa    Z<u__7Nw9v8O<F<<===r:   c                f    t          |           }| |j        u rdS | |j        u rdS | |j        u rdS dS )NrM   rO   rP   rN   )typerQ   rS   rT   )selfrU   s     r;   __str__zTestProtocol.__str__[   sH    4jj3<:SY7SX6ur:   N)rI   r,   rJ   rK   rJ   r,   )
r5   r6   r7   rQ   rR   rS   rT   classmethodrV   rZ   r9   r:   r;   rF   rF   H   sZ        H
CED	> 	> 	> [	>     r:   rF   c                  (    e Zd ZU dZded<   ded<   dS )
CleanTreesz
    Directories outputted by custom targets that have to be manually cleaned
    because on Linux `ninja clean` only deletes empty directories.
    r,   rC   r/   treesN)r5   r6   r7   __doc__r8   r9   r:   r;   r^   r^   f   s3           NNNr:   r^   c                  h    e Zd ZU ded<   ded<   ded<   ded<   ded<   ded	<   ded
<   ded<   ddZdS )InstallDatar,   rB   rC   prefixlibdirr/   	strip_binzT.Union[str, int]install_umaskmesonintrospectversionrJ   Nonec                v    g | _         g | _        g | _        g | _        g | _        g | _        g | _        g | _        d S N)targetsheadersmanemptydirdatasymlinksinstall_scriptsinstall_subdirsrY   s    r;   __post_init__zInstallData.__post_init__|   sB    2402,.13-/	46@B:<r:   NrJ   ri   r5   r6   r7   r8   ru   r9   r:   r;   rb   rb   o   s}         OOONNNKKKKKK %$$$    LLL= = = = = =r:   rb   c                      e Zd ZU ded<   ded<   ded<   ded<   ded	<   d
ed<   ded<   ded<   ded<   dZded<   dZded<   dZded<   ddZdS )TargetInstallDatar,   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_striprJ   ri   c                    |%t           j                            d| j                  }t           j                            |t           j                            | j                            | _        d S )N{prefix})ospathjoinr{   basenamerz   out_name)rY   r|   s     r;   ru   zTargetInstallData.__post_init__   sL    ',,z4;??K["'2B2B4:2N2NOOr:   )r|   r   rJ   ri   )r5   r6   r7   r8   r   r   r   ru   r9   r:   r;   ry   ry      s         JJJKKK))))KKK....&&&&((((OOOHCIP P P P P Pr:   ry   c                  <    e Zd ZU ded<   ded<   ded<   dZded<   dS )	InstallEmptyDirr,   r   
'FileMode'r   r   Nr   r   )r5   r6   r7   r8   r   r9   r:   r;   r   r      sA         IIIOOOCr:   r   c                  l    e Zd ZU ded<   ded<   ded<   ded<   ded<   dZd	ed
<   dZd	ed<   dZded<   dS )InstallDataBaser,   r   install_pathinstall_path_namer   r   r   Nr   r   	data_typeT.Optional[bool]follow_symlinks)r5   r6   r7   r8   r   r   r   r9   r:   r;   r   r      s{         IIIOOOC!%I%%%%(,O,,,,,,r:   r   c                  T    e Zd ZU ded<   ded<   ded<   ded<   dZded<   d	Zd
ed<   dS )InstallSymlinkDatar,   targetnamer   r   Nr   r   Fr}   allow_missing)r5   r6   r7   r8   r   r   r9   r:   r;   r   r      s[         KKKIIIOOOCMr:   r   c                  &     e Zd Z	 	 dd fdZ xZS )SubdirInstallDataNr   r,   r   r   r   r   excludeT.Tuple[T.Set[str], T.Set[str]]r   r   r   r   r   r   c
           
     f    t                                          ||||||||	           || _        d S rk   )super__init__r   )rY   r   r   r   r   r   r   r   r   r   	__class__s             r;   r   zSubdirInstallData.__init__   s:     	|->jZ]_hjyzzzr:   )NNN)r   r,   r   r,   r   r,   r   r   r   r   r   r,   r   r   r   r   r   r   )r5   r6   r7   r   __classcell__)r   s   @r;   r   r      sL         ]a59          r:   r   c                      e Zd ZU ded<   ded<   ded<   ded<   ded<   d	ed
<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   d#d!Zd"S )$TestSerialisationr,   r   project_namer/   suiterz   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_pathsrF   protocolintprioritycmd_is_built
cmd_is_exedependsrh   verboserJ   ri   c                Z    | j         !t          | j         t          j                  sJ d S d S rk   )r   
isinstancer   ExternalProgramrt   s    r;   ru   zTestSerialisation.__post_init__   s5    'd.0HIIIII ('IIr:   Nrv   rw   r9   r:   r;   r   r      s         III5555&&&&MMMLLLMMMJ J J J J Jr:   r   backendr,   r   T.Optional[build.Build]interpreterT.Optional['Interpreter']rJ   T.Optional['Backend']c                   | dk    rddl m} |                    ||          S | dk    rddl m} |                    ||          S | dk    rddl m} |                    ||          S | dk    rddl m} |                    ||          S | d	k    rdd
l m} |	                    ||          S | dk    rddl m
} |                    ||          S | dk    rddl m} |                    ||          S | dk    rddl m}	 |	                    ||          S | dk    rddl m}
 |
                    ||          S | dk    rddl m} |                    ||          S | dk    rddl m} |                    ||          S d S )NninjarG   )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)r   r   r   r   r   r   r   r   r   r   r   r   r   s                r;   get_backend_from_namer      s6   '""""""((<<<	D######225+FFF	H		######**5+>>>	H		######**5+>>>	H		######**5+>>>	H		######**5+>>>	H		######**5+>>>	H		######**5+>>>	H		######**5+>>>	G		""""""((<<<	F		!!!!!!&&uk:::4r:   	genvsnamec                N    | dk    rddl m} |                    ||d          S d S )Nr   rG   r   T)gen_lite)r   r   r   )r   r   r   r   s       r;   get_genvslite_backendr     s?    H######**5+$*OOO4r:   c                     e Zd ZU ded<   dZddZdddZddddZddZddZ	ddZ
d	ddd#Zd	ddd$Zdd%Z ed
&          dd'            Zdd*Zdd+Zdd-Zdd.Z ed
&          dd2            Zdd7Zdd:Zedd=            Zd ddAZddDZddFZeddG            ZddHZ	 	 	 	 	 	 	 	 dddVZ	 	 	 	 	 	 	 dd	d]Zd
d_Z ddaZ!eddf            Z"ddhZ#eddj            Z$ ed
&          dddm            Z%ddoZ&e ed
&          ddq                        Z'dddvZ( ed
&          ddy            Z)ddzZ*dd}Z+ddZ,ddZ-edd            Z.ddZ/ddZ0ddZ1ddZ2e ed
&          dd                        Z3e4 ed
&          dd                        Z5ddZ6ddZ7ddZ8d dZ9d!dZ:d"dZ;d#dZ<d$dZ=d%dZ>d&dZ?d'dZ@d(dZAd)dZBd*dZCd+d,dZD ed
&          d-d            ZE ed
&          d.d            ZFd/dZGd+d0dZHddZI ed
&          d1d            ZJd	dd2dZKd	dd2dZL	 d+d3dZMd4dZNd5dĄZOd%dńZPd6dƄZQd%dǄZRdd7dɄZSd#dʄZTd#d˄ZUd#d̄ZVd#d̈́ZWd#d΄ZXd#dτZYd#dЄZZd#dфZ[d8dԄZ\d9dՄZ]	 	 	 	 d:d;dZ^d<dZ_	 dd=dZ`d>dZaddZbd?dZcd
S (@  BackendzT.Optional['Environment']environmentz	<UNKNOWN>r   r   r   r   c                   |	d | _         d S || _        || _        |j         | _         t                      | _        | j                                         | _        | j                                         | _        t          j
        | j                                         | j                                                   | _        t          j
        | j                                         | j                                                   | _        d S rk   )r   r   r   setprocessed_targetsget_build_dirrC   get_source_dirrB   r   relpathbuild_to_srcsrc_to_build)rY   r   r   s      r;   r   zBackend.__init__  s     =#DF
& ,-0UU)7799*99;;$,T-=-L-L-N-N-1-=-K-K-M-MO O$,T-=-K-K-M-M-1-=-L-L-N-NP Pr:   FNcapturer}   
vslite_ctxT.Optional[T.Dict]rJ   c                J    t          dt          |           j                   )Nzgenerate is not implemented in )RuntimeErrorrX   r5   )rY   r   r   s      r;   generatezBackend.generate(  s"    RT$ZZ=PRRSSSr:   Twarn_multi_outputt.T.Union[build.Target, build.CustomTargetIndex]r   r,   c               D   t          |t          j                  rg|rJt          |                                          dk    r%t          j        d|j        d|j         d           |                                d         }nmt          |t          j                  r|                                d         }n8t          |t          j	                  s
J |            |
                                }t          j                            |                     |          |          S )NrG   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)rY   r   r   filenames       r;   get_target_filenamezBackend.get_target_filename+  s   a+,, 		(  TS%9%9Q%>%> Saf S SEFVS S S T T T}}q)HH5233 	(}}q)HHa!23366Q666~~''Hw||D//22H===r:   r   c                    t           j                            | j                                        |                     |                    S rk   )r   r   r   r   r   r  rY   r   s     r;   get_target_filename_abszBackend.get_target_filename_abs8  s6    w||D,::<<d>V>VW]>^>^___r:   build.BuildTargetr   c                   t          |t          j                  s
J |            |                                rG|                                }t          j                            |                     |          |          S d S rk   )r   r   r  get_debug_filenamer   r   r   r
  )rY   r   debug_filenames      r;   get_target_debug_filenamez!Backend.get_target_debug_filename;  sq    &%"344<<f<<<$$&& 	#6688N7<< 3 3F ; ;^LLL4r:   c                
   t          |t          j                  s
J |            |                                sd S t          j                            | j                                        | 	                    |                    S rk   )
r   r   r  r  r   r   r   r   r   r  r  s     r;   get_target_debug_filename_absz%Backend.get_target_debug_filename_absC  sp    &%"344<<f<<<((** 	4w||D,::<<d>\>\]c>d>deeer:   absolute_pathr0   
'Compiler'r  r/   c                   |                                 }|r| j        }n| j        }t          j                            t          j                            ||                    }|                    |d          S )NF)
get_subdirrB   r   r   r   normpathr   get_include_args)rY   r   r0   r  curdirleadtmppaths          r;   get_source_dir_include_argsz#Backend.get_source_dir_include_argsI  sg    ""$$ 	%?DD$D'""27<<f#=#=>>((%888r:   c                   |r8t           j                            | j        |                                          }n|                                }|dk    rd}|                    |d          S )Nr   .F)r   r   r   rC   r  r  )rY   r   r0   r  r  s        r;   get_build_dir_include_argsz"Backend.get_build_dir_include_argsR  sd     	W\\$.&2C2C2E2EFFFF&&((F||((777r:   c                f   t          |t          j                  r|                                p|                                }t          j                    r1|j        r*t          j	        dd|
                    dd                    }t          |                     |          |                                          S t          |t          j                  rGt          |                     |          |                                                                          S t          |t          j        t          j        f          rs|                                st%          d|j         d          t          |                     |          |                                                                          S t          |t          j                  rP|j        rGt          |                     |          |                                                                          S d S t-          d|d          )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)rY   r   link_libs      r;   get_target_filename_for_linkingz'Backend.get_target_filename_for_linking[  s   
 fe122 	1133Lv7J7J7L7LH   oV%: o6"H$PXP`P`afhlPmPmnn++F33X>>GGIII 344 
	++F33V5H5H5J5JKKTTVVV!3U5L MNN 	,,.. u$%sV[%s%s%sttt++F33V5H5H5J5JKKTTVVV 011 	% D//779S9S9U9UVV__aaatVfVVVWWWr:   )maxsizec                    t          |t          j                  rd}nL| j        j        j                            t          d                    dk    r|                                }nd}|S )Nr   layoutmirror	meson-out)	r   r   	RunTargetr   coredataoptstoreget_value_forr   r  )rY   r   dirnames      r;   r
  zBackend.get_target_dirs  se    feo.. 	"GG&/==i>Q>QRRV^^^''))GG!Gr:   build.Targetoc                j   t           j                            | j                                        |                     |                    }t           j                            | j                                        |                     |                    }t           j                            ||          S )z7Get a target dir relative to another target's directory)r   r   r   r   r   r
  r   )rY   r   rB  
target_dir
othert_dirs        r;   get_target_dir_relative_toz"Backend.get_target_dir_relative_to~  s~    W\\$"2"@"@"B"BDDWDWXYDZDZ[[
W\\$"2"@"@"B"BDDWDWXYDZDZ[[
wz:666r:   c                    |                      |          }|r%t          j                            | j        |          S | j        S rk   )r
  r   r   r   r   )rY   r   rD  s      r;   get_target_source_dirzBackend.get_target_source_dir  s?    ((00
 	?7<< 1:>>>  r:   GT.Union[build.BuildTarget, build.CustomTarget, build.CustomTargetIndex]c                p    t           j                            |                     |d          dz             S )NFr   z.p)r   r   r   r  r  s     r;   get_target_private_dirzBackend.get_target_private_dir  s/    w||D44Vu4UUX\\]]]r:   c                    t           j                            | j                                        |                     |                    S rk   )r   r   r   r   r   rK  r  s     r;   get_target_private_dir_absz"Backend.get_target_private_dir_abs  s6    w||D,::<<d>Y>YZ`>a>abbbr:   gensrcIT.Union[build.CustomTarget, build.CustomTargetIndex, build.GeneratedList]srcc                   t          |t          j        t          j        f          r3t          j                            |                     |          |          S t          j                            |                     |          |          S )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
  rK  )rY   r   rN  rP  s       r;   get_target_generated_dirz Backend.get_target_generated_dir  sl     fu153JKLL 	B7<< 3 3F ; ;SAAA w||D77??EEEr:   suffixnumberr   mesonlib.Filec                    |j          d| d| }t          j                            |                     |          |          S )Nz-unityr#  )r   r   r   from_built_filerK  )rY   r   rS  rT  osrcs        r;   get_unity_source_filezBackend.get_unity_source_file  sH     +66V66f66},,T-H-H-P-PRVWWWr:   	unity_srcT.List[mesonlib.File]c                T    g g t          j                                        |          }                     d          }t	          |t
                    s
J d            d fd	}|                                D ]\  }}|d
z   }d}	d }
|D ]a}||k    r;|
r|
                                  ||                                |	          }
|	d
z  }	d}|
	                    d| d           |d
z  }b|
r|
                                 D ]}t          j        ||dz              S )N
unity_sizefor mypyrS  r,   unity_file_numberr   rJ   T.TextIOc                                        	| |          }|                    j                                        j                                                  }|dz   }                    |           t          j                            |          }t          j        	                    |          st          j
        |                               |           t          |dd          S )N.tmpwutf-8encoding)rY  r  r   r   r   appendr   r   r@  existsmakedirsopen)
rS  r_  rZ  
outfileabsoutfileabs_tmpoutfileabs_tmp_dir	abs_filesresultrY   r   s
         r;   init_language_filez8Backend.generate_unity_files.<locals>.init_language_file  s    2266CTUUI"001A1P1P1R1R151A1O1O1Q1QS SJ'&0NZ(((!#!@!@7>>"455 0.///MM)$$$g>>>>r:   rG   r   z	#include<z>
rb  )rS  r,   r_  r   rJ   r`  )r   	compilersvaluesget_target_optionr   r   itemscloseget_default_suffixwriter   replace_if_different)rY   r   rZ  compsrcsr]  rp  compsrcsfiles_in_currentr_  ofilerP  xrn  ro  s   ``           @@r;   generate_unity_fileszBackend.generate_unity_files  s   !#	(*)&*:*A*A*C*CYOO++FLAA
*c**66J666
	? 
	? 
	? 
	? 
	? 
	? 
	? 
	? 
	? #..** 	 	JD$)A~ ! E & &#z11 &..t/F/F/H/HJ[\\E%*%'($0000111 A%    	9 	9A)!QZ8888r:   todirfromdirc                    t           j                            t           j                            d|           t           j                            d|                    S )Ndummyprefixdir)r   r   r   r   )r  r  s     r;   r   zBackend.relpath  sD    wrw||,<eDD!w||,<gFFH H 	Hr:   r   proj_dir_to_build_root4T.Tuple[T.List[str], T.List[build.BuildTargetTypes]]c                    |                      ||                                |          \  }}t          t                              |                    |fS rk   )_flatten_object_listget_objectslistdictfromkeys)rY   r   r  obj_listdepss        r;   flatten_object_listzBackend.flatten_object_list  sI    2266;M;M;O;OQghh$DMM(++,,d22r:   objectsbuild.ExtractedObjectsc                    |                      |j        |gd          \  }}t          t                              |                    S )Nr   )r  r   r  r  r  )rY   r  r  _s       r;   determine_ext_objszBackend.determine_ext_objs  s;    //	2NN!DMM(++,,,r:   8T.Sequence[T.Union[str, 'File', build.ExtractedObjects]]c                ^   g }g }|D ]"}t          |t                    rOt          j                            || j        |                                |          }|                    |           gt          |t          j	                  r|j
        rNt          j                            ||                    | j                            }|                    |           t          j                            || j                  }|                    |                    |                     %t          |t          j                  r|j        rN|                     |j        |j        |          \  }}	|                    |           |                    |	           |                     |          }
|r9|
D ]5}|                    t          j                            ||                     6n|                    |
           |                    |j                   t)          d          ||fS )Nz!Unknown data type in object list.)r   r,   r   r   r   r   r  rg  r   r   is_builtrel_to_builddirr   ExtractedObjects	recursiver  r   objlistextend_determine_ext_objsr   )rY   r   r  r  r  r  objrB  objsr<   new_objss              r;   r  zBackend._flatten_object_list  s    !#/1 	J 	JC#s## JGLL!7!%!2F4E4E4G4GN N""""C// J< <%;%(%8%89J%K%KM MAOOA&&&&%;%)%68 8AOOC$7$7$:$:;;;;C!788 J= #"77
CKQghhGD!OOD)))KKNNN33C88) .% Q Q 5KQ(O(OPPPPQ OOH---CJ''''$%HIII~r:   c                J    | j         D ]}|                    d          r dS dS )NswiftTF)r2   endswith)r   ss     r;   is_swift_targetzBackend.is_swift_target  s8     	 	Azz'"" ttur:   c                n    g }|j         D ]*}|                    |                     |                     +|S rk   )link_targetsrg  rM  )rY   r   ro  ls       r;   determine_swift_dep_dirsz Backend.determine_swift_dep_dirs  sA     $ 	> 	>AMM$99!<<====r:   cmd_T.Sequence[T.Union[programs.ExternalProgram, build.BuildTarget, build.CustomTarget, File, str]]r   extra_bdeps%T.Optional[T.List[build.BuildTarget]]feedr   )T.Optional[mesonlib.EnvironmentVariables]r   r   installdir_mapT.Optional[T.Dict[str, str]]'ExecutableSerialisation'c
                `   |^}
}t          |
t          j                  r|
                                }|
j        }nt          |
t
          j                  r|                     |
          g}|
j        }nt          |
t
          j                  r#|                     |
          g}t          j
        }nVt          |
t          j                  r-|
                    | j        j                  g}t          j
        }n|
g}t          j
        }g }|D ]}t          |t          j                  rA|                                }t          |t"                    sJ |                    |           ^t          |t
          j        t
          j        f          r)|                    |                     |                     t          |t          j                  r3|                    |                    | j        j                             |                    |           | j        j        |         }|                                s|                                r|                     |
|pg           }ng }| j        j                            |           }|ri| j                                        rP| j                                        sd|d         z   dz   }t5          |          | j                                        }n|d                             d          rddg|z   }nZ|d                             d          r?t          j                    s,t          j                    st          j                    sdg|z   }d }|p| j                                        }t?          ||z   |||||||||	
  
        S )	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mono) r   r   r   get_commandfor_machiner   r  r  r  r   BUILDr   r   r  r   rB   get_pathr,   rg  machines
is_windows	is_cygwindetermine_windows_extra_pathsmatches_build_machineneed_exe_wrapperhas_exe_wrapperr   get_exe_wrapperr  is_wslr   r   )rY   r  r   r  r   r  r   r   r   r  exeraw_cmd_argsexe_cmdexe_for_machiner   cpr.   r   r   msgr   s                         r;   get_executable_serialisationz$Backend.get_executable_serialisation  s    !lc8344 	2oo''G!oOOU.// 	233C889G!oOOU/00 	2 33C889G+1OOX]++ 	2**4+;+FGGHG+1OOeG+1O " 
	# 
	#A!X566 	#JJLL!!S)))))""""A 153EFGG # < <Q ? ?@@@@Ax}-- # 1 1$2B2M N NOOOO"""""+O< 	7#4#4#6#6 	<<S+BSQSTTKKK!-6LL_]]] 	d.??AA 	#3355 *5
B FS S$S)))*::<<KKqz""6** -!6*W4$$V,, -h6I6K6K -xOaOcOc -gogvgxgx -!(W,K=T-;;==&w'93'2G'2GT3Q_a a 	ar:   r  \T.Union[str, mesonlib.File, build.BuildTarget, build.CustomTarget, programs.ExternalProgram]r   hT.Sequence[T.Union[str, mesonlib.File, build.BuildTarget, build.CustomTarget, programs.ExternalProgram]]force_serializeT.Tuple[T.List[str], str]c
           	     <	   g }
|
                     |           |
                    |           |                     |
||||||	          }g }|j        r|                     d           |j        r|                     d           |r|                     d           t          d |j        D                       r|                     d           |r|j        r|                     d           |j        o| }|pt          |          }|r|                     d           |r|                     d	           |r|dgk    rt          j        d
          rlg }|                    i                                           D ]\  }}|                     | d|             d
g|z   |j        z   d                    |          fS |sc|s|s	|j        dfS g }|r|d|gz  }|r|d|gz  }| j                                        ddgz   |z   dgz   |j        z   d                    |          fS t#          |t$          j        t(          j        t(          j        f          r%t.          j                            |j                  }n^t#          |t6          j                  r%t.          j                            |j                  }nt.          j                            |          }t=          j                    }|j         r|j         !                    |           |"                    tG          tI          |j                  d                     |"                    tG          tI          |j%                  d                     |"                    tG          tI          |          d                     |"                    tG          tI          |          d                     |&                                }d| d| d}t.          j                            | j        '                                |          }tQ          |d          5 }tS          j*        ||           ddd           n# 1 swxY w Y   | j                                        ddd|gz   d                    |          fS )zY
        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     K   | ]}d |v V  	dS )
Nr9   ).0r  s     r;   	<genexpr>z/Backend.as_meson_exe_cmdline.<locals>.<genexpr>s  s&      ..Qtqy......r:   z!because command contains newlinesz
to set envzto capture outputzto feed inputr   =z, r   z	--capturez--feedz
--internalr  z--rd  re  
meson_exe_r  z.datwbNz
--unpickle)+rg  r  r  r   r   anyr   varnamescan_use_envr}   shutilwhichget_envrt  r   r   get_build_commandr   r   r   r   r  r  r   r   r   r   r   r   rz   hashlibsha1r   hashupdatebytesr,   r   	hexdigestget_scratch_dirrj  pickledump)rY   r  r   r   r  r   r  r  r   r   r  esreasonsr  envlistkvargsr   hasherdigestscratch_fileexe_datafs                           r;   as_meson_exe_cmdlinezBackend.as_meson_exe_cmdlineY  s    uw

3

8..sG['SWY\fm.nn!> 	*NN=)))> 	1NN/000 	-NN+,,,.."+..... 	@NN>??? 	)3< 	)NN<((( o=o*=):T']] 	0NN./// 	,NN?+++ 	G7|n44e9L9L4GB--// + +1!zzazz****7W$r{2DIIg4F4FFF 	 '4 '{B& "D /g.. )4((  2244e7LLtSW[V\\_a_jj		'"" 
 cH4!-u/AC D D 	-w''11HHX]++ 	-w''	22HHw'',,H 6 	 FKKeC,,w???@@@eC
OOg>>>???eCLL7;;;<<<eCII888999!!##;H;;v;;;7<< 0 @ @ B BLQQ(D!! 	QKA	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 2244e\[c7dd		'""$ 	$s   <QQ"%Q"T.Tuple[str, str]c                   t           j                            | j                                        d          }t          |d          5 }|                     |           d d d            n# 1 swxY w Y   t           j                            | j                                        d          }t          |d          5 }|                     |           d d d            n# 1 swxY w Y   ||fS )Nzmeson_test_setup.datr  zmeson_benchmark_setup.dat)r   r   r   r   r  rj  write_test_filewrite_benchmark_file)rY   	test_datadatafilebenchmark_datas       r;   serialize_testszBackend.serialize_tests  sC   GLL!1!A!A!C!CE[\\	)T"" 	+h  ***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+d&6&F&F&H&HJeff.$'' 	08%%h///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0.((s$   A**A.1A.<CC"%C"9T.Tuple[T.Union['Compiler', 'StaticLinker'], T.List[str]]c                    t          |t          j                  r| j        j        |j                 g fS |                                \  }}||fS )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   r0  static_linkerr  $get_clink_dynamic_linker_and_stdlibs)rY   r   r  stdlib_argss       r;    determine_linker_and_stdlib_argsz(Backend.determine_linker_and_stdlib_args  sQ    
 fe122 	D:+F,>?CCDDFF;+~r:   rd   rq  T.Mapping[str, 'Compiler']'Environment'c                    t           j                            |           } |                                D ]}| |                    |          v r dS dS NTF)r   r   r  rr  get_library_dirs)rd   rq  r   ccs       r;   _libdir_is_systemzBackend._libdir_is_system  s\    !!&))""$$ 	 	B,,S1111tt 2ur:   
T.Set[str]c                0   g }t           D ]x}	 | j        j                            |j        |          }t          |t                    r|                    |           n|                    |           i# t          $ r Y uw xY w| 
                    |          S rk   )r   r   r=  get_external_link_argsr  r   r,   rg  r  	Exceptionget_rpath_dirs_from_link_args)rY   r   r  langes        r;   get_external_rpath_dirszBackend.get_external_rpath_dirs  s    + 	 	D$-DDVEWY]^^a%% #KKNNNNKKNNN   11$777s   A%A33
B ?B r  c                2   t                      }t          j        d          }t          j        d          }t          j        d          }| D ]H}|                    |          }|r@|                    d                              d          D ]}|                    |           |                    |          }|ra|                    d                              d          D ]8}t          |                                          r|                    |           9|                    |          }	|	r_|	                    d                              d          D ]6}t          |                                          rt          d| d          7J|S )Nz-Wl,-rpath[=,]([^,]+)z-Wl,-R[,]?([^,]+)z-Wl,--just-symbols[=,]([^,]+)rG   :z Invalid arg for --just-symbols, z is a directory.)
r   r,  compilematchgroupsplitaddr	   is_dirr   )
r  dirsrpath_regexrunpath_regexsymbols_regexargrpath_matchdirrunpath_matchsymbols_matchs
             r;   r  z%Backend.get_rpath_dirs_from_link_args  s   55 j!9:: 
#788 
#CDD 	g 	gC%++C00K "&,,Q//55c:: " "CHHSMMMM)//44M &(..q1177<< & &CCyy'')) &)//44M g(..q1177<< g gCCyy'')) g,-ePS-e-e-efffgr:   exclude_system'ImmutableListProtocol[str]'c                   t                      }| j                                        }|j        D ]}|j        dvr|j        D ]~}t          j                            |          s#t          j        	                    |          }|r"| 
                    ||j        | j                  rf||                     |          v r~t          j                            |          d         dv s3t          j        dt          j                            |                    st#          ||          r|t%          |          dz   d          }t          j                            |          rJ d| d            |                    t          j                            | j        |                     i|                    |           |                    |                     |j                             t1          |j        |j                  D ]E}	t7          |	t8          j                  r)|                    |                     |	|                     FtA          |          S )N>   cmakelibrary	pkgconfigrG   >   .lib.dylibr'  .dllz.+\.so(\.|$)zrel_to_src: z is absolute)!r   r   r   external_deps	type_name	link_argsr   r   isabsr@  r  rq  r  splitextr,  r  r   r   r  r  r   r   difference_updater  r   r  link_whole_targetsr   r   r  r  /rpaths_for_non_system_absolute_shared_librariesr  )
rY   r   r   pathssrcdirdeplibpathrd   
rel_to_srcis
             r;   r0  z7Backend.rpaths_for_non_system_absolute_shared_libraries  s;   !+!0022' 	W 	WC}$EEE= & &w}}W-- 11! d&<&<VVEUW[Wg&h&h T99&AAAA G$$W--a04UUUx1A1A'1J1JKK V !&&11 &!'Fa(8(8!9J!w}}Z88aa:a:a:a:aaaaIIbgll4+<jIIJJJJIIf%%%%##D$F$Fs}$U$UVVVVv*F,EFF 	f 	fA!U.// fTQQRSUcddeeeE{{r:   T.Tuple[str, ...]c                   | j         j        j                            t	          d                    dk    r"t          |                                          }n#t                      }|                    d           t          |t          j
                  rL|                    |                     |                     |j                            d |D                        t          |          S )Nr9  r:  r;  c                8    g | ]}|                     d           S )rd  )encode)r  r<   s     r;   
<listcomp>z0Backend.determine_rpath_dirs.<locals>.<listcomp>:  s$    /R/R/Ra0A0A/R/R/Rr:   )r   r=  r>  r?  r   r   get_link_dep_subdirsr  r   r   r  r  r0  r   tuple)rY   r   ro  s      r;   determine_rpath_dirszBackend.determine_rpath_dirs/  s     $-;;Ih<O<OPPT\\\ ; ; = =>>FF\\FJJ{###fe/00 	TMM$NNvVVWWW'../R/R6/R/R/RSSSV}}r:   rz   c                :   t           j        j        4|                     t           j        j        t           j        j                  } |                     t           j        j                  }d}t          |          dk    r~d                    |dd                    }t          |           t          |          dz   k    r>t          j	        | 
                    d                                                    dz   }|} dD ]}|                     |d          } || z   S )	Nr      /)   rd  r  )rA  \r  )r   r   altsepr.  sepr  r  r   r  r  r:  r  )rz   partshashedtempchs        r;   canonicalize_filenamezBackend.canonicalize_filename=  s     7>%MM"'."'+>>EBGK((u::>>88E"##J''D5zzCIIN** ell7&;&;<<FFHH3N" 	+ 	+BMM"c**EE~r:   r    source'FileOrString'	targetdirc                   t          |t          j                  sJ t          |t          j                  r|j        |         S | j                                        }|                    | j	                  }|
                    d          r|j        rmt          j                            |          r|t          |          dz   d          }t          j                            ||                     |                    }nt          j                            |          }d|d d         z   dz   }n|j        rpt          j                            |          r|t          |          dz   d          }dt          j                            ||                     |                    z   }nt          j                            |          r|}nt          j                            t          j                            ||          t          j                            | j                                        |                                                    }| j        j        |j                 }|                                }	|                                dk    r|                     |d          }
|
s!t          |t          j                  rc|j        r\|                    dd          d         t<          d	         vr1t          |t          j                  r|j        st?          d
          nd}	|                      |          dz   |	z   }| t          j                            ||          S |S )N)z.valaz.gsrG   zmeson-generated_rB  z.ctaskingb_ltor#  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   r,  r  r   rK  r   r   r   r  r  r  get_object_suffixget_idrs  r0  prelinkrsplitr   r   rK  )rY   r   r0   rL  rN  rC   rel_src
gen_sourcer.   object_suffixuse_ltorets               r;   object_filename_from_sourcez#Backend.object_filename_from_sourceN  s   &(-00000fe122 	.%f--$2244	(():;; ,-- 	s 47==)) ;%c)nnq&8&9&9:G'//'43N3Nv3V3VWW'**733+gcrcl:TAJJ_ 	sw}}W%% 7!#i..1"4"5"56+bgoogtGbGbciGjGj.k.kkJJw}}W%% s$

W__RW\\)W-M-M-/W\\$:J:Y:Y:[:[]c]n]n]p]p-q-qs s
"+F,>?1133??	)),,VW==G *:fe.ABB *v~ *}}S!,,Q/=3EEE!&%*=>> Hv~ H2  4G  H  H  H$)M((44s:]J 7<<	3///
r:   extobj'build.ExtractedObjects'c                   g }|                      |j                  }t          |j                  }|j        D ]\}|                                D ]E}|                     |j        ||          }|                    t          j	        |                     F]g }|D ]s}	| j
                            |	          r|                    |	           2| j
                            |	          r'|                    |	                                           t|j        r|                     |j                  r|j        j                                        D ]x\  }
}|j        j        |
         }|                                dk    rI|                     |
|          }|                    t(          j                            ||                     y|s|S |                     |j                  rt1          |j        j                                        |          }g }|                     |j        d          }t7          |t8                    s
J d            |                                D ]\  }}|j        t<          v r||z  }t?          tA          |          |z   dz
  |z            D ]E}| !                    |j        |"                                |          }|                    |           F|D ]`}tG          |j        j                                        |          }| $                    |j        |||          }|                    |           a|S )Nmsvcr]  r^  rG   )%rK  r   r  srclistgenlistr  rR  rg  r   from_built_relativer   	is_source	is_objectrelative_namepchtarget_uses_pchrt  rq  get_argument_syntaxget_msvc_pch_objnamer   r   r   is_unityr   rr  rs  r   r   r-   LANGS_CANT_UNITYranger  rY  rv  r   r^  )rY   r_  ro  rN  raw_sourcesrN  rr   r2   r  r  ri  r0   objnamery  r]  rz  r{  r6  _srcrX  s                        r;   r  zBackend._determine_ext_objs|  sV    //>>	 6>**n 	C 	CF'')) C C44V]FANN""4#;D#A#ABBBBC
 +- 	1 	1A))!,, 1q!!!!!++A.. 1aoo//000 : 	D$..v}== 	D#].4466 D D	c!=248//11V;;"77cBBGMM"',,y'"B"BCCC  	M
 =='' 	)-fm.E.L.L.N.NPWXXHG//|LLJj#..::
:::&nn.. ) )
d=$444tOGD		J 6 :zIJJ ) )A55fm6:6M6M6O6OQRT TDNN4(((()
  	# 	#D.v}/F/M/M/O/OQUVVH66v}hPTV_``GMM'""""r:   c                    g }|                      |          }|                    |d          }|                    |                                          }|r||                    ||d                   z  }||z   S )NFr   )rK  r  get_pchget_languageget_pch_use_args)rY   r0   r   r  pchpathincludeargsr  s          r;   get_pch_include_argszBackend.get_pch_include_args  s}    --f55//??NN8002233 	=H--gqt<<<DT!!r:   r  ri  c                    t          |          dk    rd| dS t          j                            |d                   d         dz   S )NrG   
meson_pch-z.objr   )r  r   r   r-  )rY   r  ri  s      r;   rl  zBackend.get_msvc_pch_objname  sF    s88q==*****wA''*V33r:   
pch_headerc                $   d| d| }t           j                            |                     |          |          }t           j                            | j        |          }t          j        t           j                            |          d           dt           j                            |           d}|dz   }t          |dd	
          5 }	|		                    |           d d d            n# 1 swxY w Y   t          j        ||           |S )Nr|  r#  Texist_okz
#include ""rb  rc  rd  re  )r   r   r   rK  rC   ri  r@  r   rj  rw  r   rx  )
rY   r   r  r}  	impl_namepch_rel_to_buildpch_filecontentpch_file_tmpr  s
             r;   create_msvc_pch_implementationz&Backend.create_msvc_pch_implementation  s6    /....	7<<(C(CF(K(KYWW 7<<0@AA
BGOOH--====>rw//
;;>>>&(,g666 	!GGG	 	 	 	 	 	 	 	 	 	 	 	 	 	 	%h===s   C00C47C4c                    	 t          j        d|                     |d                    S # t          t          f$ r Y dS w xY w)Nr}   b_pchF)Tcastrs  KeyErrorAttributeErrorr  s     r;   rj  zBackend.target_uses_pch  sP    	6&$"8"8"I"IJJJ.) 	 	 	55	s   (+ A A c                    g }| D ]B}|                     d          r|                    dd          }|                    |           C|S )N)z-Dz/DrD  z\\)
startswithr.  rg  )r  
extra_argsr  s      r;   escape_extra_argszBackend.escape_extra_args  s\     #%
 	# 	#C~~l++ 0kk$//c""""r:   'build.BuildTarget'c                j    |j         | j        j        |j                 v r|                                S g S rk   )r-   r   stdlibsr  get_no_stdinc_args)rY   r   r0   s      r;   get_no_stdlib_argszBackend.get_no_stdlib_args  s4    
 263E FFF..000	r:   'CompilerArgs'c           
        |                                 }||                     ||          z  }||                                z  }||                    t	          j        d|                     |d                              z  }|                     |d          r||                                z  }||                    || j	        |j
                  z  }||                    || j	        |j
                  z  }|                     |d          }t          |t                    s
J d            ||                    |          z  }|                     |d          }t          |t                    s
J d            ||                    |          z  }|| j                            ||j
        |j                  z  }|| j                            ||j                  z  }|| j	        j                            |j        |                                          z  }d|v rd|v sd	|v r|                    d           t          |t"          j                  r||                                z  }t          |t"          j                  r|j        r||                                z  }nDt          |t"          j        t"          j        f          r|j        r||                                z  }tA          |!                                          D ]}|"                                s|j#        d
k    r|j$        dk    rkt          |tJ          j&                  sJ |j'        dk    r7|j(        0|j(        D ](}|)                    d          r|d|dd          gz  } n)|d|j'        gz  }nKt          |tJ          j*                  r||+                    d
          z  }n||,                    |          z  }t          |t"          j                  r||-                    |          z  }|j#        dk    rKt]          |j/        |j0                  D ]0}| 1                    |          }	||2                    |	d          z  }1|S )Nr,   warning_levelwerroroptimizationr^  debugz/Ziz/ZIz/Z7r>   r%  zglib-2.0)z>=z==z--target-glibr
   z--pkgr=   F)3compiler_argsr  get_always_argsget_warn_argsr  r  rs  get_werror_argsget_option_compile_argsr   r   get_option_std_argsr   r,   get_optimization_argsr}   get_debug_argsr   get_project_argsr  get_global_argsr=  get_external_argsrv  remover(  get_pic_argsr0  picr2  pieget_pie_argsreversedget_external_depsfoundr-   r*  r   ExternalDependencyr   version_reqsr  ExternalLibraryget_link_argsget_dependency_compile_argsget_exe_argsr   r  r/  rK  r  )
rY   r   r0   commandsr  r  r3  reqltpriv_dirs
             r;   generate_basic_compiler_argsz$Backend.generate_basic_compiler_args  s    ))++
 	D++FH===H,,...H**16%9O9OPVXg9h9h+i+ijjj
 !!&(33 	300222H 	H44VT=MvO`aaaH009I6K\]]]--fnEE,,,88j888H22<@@@&&vw77%&&22
222H++E222 	DJ//&:KVM_``` 	DJ..x9KLLL 	D$-??@RT\TiTiTkTklll XUh%6%6EX<M<MOOE"""fe122 	0--///Hfe122 	0vz 	0--///HH!4e6F GHH 	0VZ 	0--///H
 F446677 	7 	7C99;;  F**=K//%c<+JKKKKKx:--#2B2N#&#3 & &C"~~l;; & (_c!""g,F F %& #( 33HH\%ABB : 1 1& 9 99HH@@EEE &%"233 7C,,X666 	))F/1JKK G G66r::H55hFFFr:   r  T.List[build.Target]c                   g }|D ]}|                                 s%t          d|                                 d          |                     |          }|sS|                                dk    rd|z   }nE|                                dk    r|                    d          rn|                                |z   }|                    |           |S )Nz)Tried to link with a non-library target "z".r<   z-Wl,nvlinkr&  )	r1  r   get_basenamer6  rv  get_linker_idr  get_linker_lib_prefixrg  )rY   r0   r  r  r<   r  s         r;   build_target_link_argumentsz#Backend.build_target_link_argumentsE  s     	 	A'')) e"#cq~~O_O_#c#c#cddd66q99C $$&&#--sl''))X55#,,t:L:L5 4466<KKr:   c                   t                      }| j        j        |j                                                 }|r3|                    t          j                            |d                     | j        j        |j                 	                                }|r3|                    t          j                            |d                     t          |t          j                  rv|j                                        D ]\}|                    |                    | j                             |                    |                    | j                             ]t%          |          S )Nbin)r   r   
propertiesr  get_rootr  r   r   r   get_sys_rootr   r   r  rq  rr  r  get_program_dirsr  r  )rY   r   r1  rootsys_rootr  s         r;   get_mingw_extra_pathszBackend.get_mingw_extra_paths]  s(   !+*6+=>GGII 	1IIbgll4//000#.v/ABOOQQ 	5IIbgll8U33444fe/00 	D&--// D DR001ABBCCCR001ABBCCCCE{{r:   link_argc                \   |                      d          r
| dd          } t          |           }|                                sd S 	 |                    d          }n# t          $ r Y d S w xY w|j                            d          D ]}t          |j                  c S |                                r|j        }t          d	                    |
                                                    dd	                              }|                    d          D ]}t          |          c S d S )
N)z-lz-Lr
   T)strictz*.dllz/binz/librG   )maxsplit)r  r	   is_absoluteresolveFileNotFoundErrorparentglobr,   is_filer   r/  rX  )r  r  r  binpathr  s        r;   search_dll_pathzBackend.search_dll_pathn  s3    |,, 	$|HNN}} 	4				&&AA  	 	 	44	 w'' 	! 	!Aqx==   99;; 	Av{{1::<<#6#6v#6#J#JKKLLg&& 	  	 Aw<<ts   A 
A+*A+c           
        t                      }|j        D ]w}|j        dk    r/|                    dd          }|r|                    |           <|                    t          dt          | j        |j	                                       xt          |j        |j                  D ]D}t          |t          j                  r(|                    |                     |                     E|S )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   r)  r*  get_variabler  r  filtermapr  r+  r   r  r/  r   r   r  extract_dll_paths)rU   r   resultsr3  r  r6  s         r;   r  zBackend.extract_dll_paths  s     %%' 		R 		RC}++))HB)OO KK'''NN6$C,?(O(OPPQQQQv*F,EFF 	9 	9A!U.// 9s44Q77888r:   uT.Union[build.BuildTarget, build.CustomTarget, build.CustomTargetIndex, programs.ExternalProgram, mesonlib.File, str]ST.Sequence[T.Union[build.BuildTarget, build.CustomTarget, build.CustomTargetIndex]]c                   t                      }t                      }t                      }t          |t          j                  r'|                    |                                           |D ]X}|                    |           t          |t          j                  r'|                    |                                           Y|D ]a}t          j        	                    | j
                                        |                     |                    }|                    |           bt          |t          j                  rt|                    |                     |                     | j
        j                            |j                  s(|                    |                     |                     t%          |          t%          |          z   S )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  )	rY   r   r  prospectivesinternal_depsr)  bdeplddirsegs	            r;   r  z%Backend.determine_windows_extra_paths  s    7:ee$'EE$'EEfe/00 	< 8 8 : :;;; 	> 	>DT"""$ 122 >##D$:$:$<$<===  	& 	&BW\\$"2"@"@"B"BDDWDWXZD[D[\\Ff%%%%fe/00 	I  !7!7!?!?@@@#,BB6CUVV I$$T%?%?%G%GHHHM""T-%8%888r:   r  
T.BinaryIOri   c                `    |                      | j                                        |           d S rk   )write_test_serialisationr   get_benchmarksrY   r  s     r;   r  zBackend.write_benchmark_file  s,    %%dj&?&?&A&A8LLLLLr:   c                `    |                      | j                                        |           d S rk   )r  r   	get_testsr  s     r;   r  zBackend.write_test_file  s,    %%dj&:&:&<&<hGGGGGr:   testsT.List['Test']T.List[TestSerialisation]c                   g }t          |d           D ]9}|                                }t          |t          j                  r|                                }nKt          j                            | j	        
                                |                     |                    g}t          |t          j        t          j        f          r|j        }nt          j        }|j        D ]=}t          |t          j                  r!|j        t          j        u rt          j        } n>| j	                            |          }| j	                                        }	| j	        j        |j                 }
|
                                s|
                                rg }t          |t          j                  r!t3          |                                          }|                     ||          }|j        D ]N}t          |t          j                  r2|                     |g           D ]}||vr|                    |           Ong }g }t;          |j                  }t          |t          j                  r|                     |           |j        D ]}t          |t          j                  r|                     |           n4t          |t          j!                  r|                     |j"                   t          |tF          j$                  ret          j                            | j	        
                                |%                    | j&                            }|                    |           t          |tN                    r|                    |           t          |t          j        t          j!        f          r0|(                    | )                    ||j*                             ht          |t          j                  r)|(                    |                                           tW          d          tY          j-        |j.                  }|
                                s|
                                s|
/                                st;                      }|D ]b}t          |t          j                  rF|0                                D ]1}t          |t          j1                  r|                     |           2c| j	        
                                t;          fd|D                       }|r$|2                    dt3          |          d           tg          |4                                |j5        |j6        |||	| j	        7                                |j8        |||j9        |j:        |j*        ||j;        |j<        t          |t          j        t          j!        f          t          |t          j=                  d |D             | j	        j>        j?        |j@                  }|                    |           ;|S )Nc                    d| j         z  S )N)r   )tsts    r;   <lambda>z3Backend.create_test_serialisation.<locals>.<lambda>  s    rCL/@ r:   )keyzBad object in test command.c              3  |   K   | ]6}t           j                            |                                          V  7d S rk   )r   r   r   r  )r  r  env_build_dirs     r;   r  z4Backend.create_test_serialisation.<locals>.<genexpr>  s<      -t-t^_bgll=!,,...Y.Y-t-t-t-t-t-tr:   LD_LIBRARY_PATHr  c                6    g | ]}|                                 S r9   )rV  r  r~  s     r;   r;  z5Backend.create_test_serialisation.<locals>.<listcomp>"  s     #@#@#@1AHHJJ#@#@#@r:   )A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  rg  r   r   Targetr  r  r   r   r   r  r   r,   r  construct_target_rel_pathsr   r   copydeepcopyr   	is_darwinr  r(  prependr   get_namer   r   r  r   r   r   r   r   r2  r=  rh   r   )rY   r  arrr   r  r  test_for_machineais_crossr   r.   r  r   r  r   r   t_envld_lib_path_libsr<   r  ld_lib_pathtsr  s                         @r;   create_test_serialisationz!Backend.create_test_serialisation  s   )+#@#@AAA T	 T	A))++C#x788 foo''w||D$4$B$B$D$DdF^F^_bFcFcdde# 183KLMM 7#&?   $1#6  Z  a!233 }(:::+8+=('667GHHH*::<<K&/@G!!## !w'8'8':': !oqc5#566 O"&s'K'K'M'M"N"NK"@@kRR 6 6A!!U%677 6!%!C!CAr!J!J 6 6A 33 + 2 21 5 5 5	6 !$&H+.qy>>G#u|,, !C   Z H Ha.. *KKNNNN5#:;; *KK)))a// 
HT%5%C%C%E%EqGXGXY]YjGkGkllAOOA&&&&3'' HOOA&&&&EL%2I#JKK HOOD$C$CAqy$Q$QRRRR8#;<< HOOAMMOO4444()FGGGM!%((E%%'' M0A0A0C0C MGL]L]L_L_ M?Buu   8 8A!!U%677 8!"!4!4!6!6 8 8A)!U-@AA 8 0 4 4Q 7 7 7 $ 0 > > @ @*--t-t-t-tcs-t-t-t*t*t MMM"3T+5F5FLLL"1::<<#x#.0@0Q0Q0S0S#$=(E#$=!)QY#.
AJ#-cEL%BY3Z#[#[#-c53C#D#D#@#@#@#@#@#'#3#<#D#$9	. 	.B JJrNNNN
r:   c                V    t          j        |                     |          |           d S rk   )r  r  r  )rY   r  r  s      r;   r  z Backend.write_test_serialisation(  s(    D225998DDDDDr:   c                                          |          t          |t          j                  rpdt          |t          j                  r|                                g}n<t          |t          j        t          j        f          sJ |                                }fd|D             }=t          j
                                      sJ  fd|D             }fd|D             }|S )Nr#  c                P    g | ]"}t           j                            |          #S r9   r   r   r   )r  r~  rD  s     r;   r;  z6Backend.construct_target_rel_paths.<locals>.<listcomp>7  s)    @@@127<<
A..@@@r:   c                ~    g | ]9}t           j                            j                                        |          :S r9   r   r   r   r   r   )r  r~  rY   s     r;   r;  z6Backend.construct_target_rel_paths.<locals>.<listcomp>:  s8    ZZZQrw||D$4$B$B$D$DaHHZZZr:   c                P    g | ]"}t           j                            |          #S r9   )r   r   r   )r  r~  r   s     r;   r;  z6Backend.construct_target_rel_paths.<locals>.<listcomp>;  s)    DDDqrwq'22DDDr:   )r
  r   r   r2  r  r	  r  r  r  r   r   r,  )rY   r   r   outputsrD  s   ` ` @r;   r  z"Backend.construct_target_rel_paths+  s   ((++
a)** 	+w#*sJa*++ 	&~~''(GGa%"4e6M!NOOOOOmmooG@@@@@@@7==)))))ZZZZRYZZZGDDDDGDDDGr:   r<   rb   c                   | j         j        }|u| j        j        j                            t          d                    }t          |t                    s
J d            |r!t          j
                            |d          }nd S t          j
                            | j                                        d          }t          j
                            | j                                        |          }t          j
                            | j                                        t          j
                            |                    }t          j
                            d|          }t          j
                            dt          j
                            |                    }ddd | j         j                                        D             d}	t#          |d	d
          5 }
|
                    t'          j        |	                     d d d            n# 1 swxY w Y   |j                            t/          |||d ddd                     | j         j                                        D ]}|                                D ]x\  }}t          j
                            ||          }t          j
                            ||          }|j                            t/          |||d |j        dd                     yd S )N
licensedirr^  z
depmf.jsonr   zdependency manifestz1.0c                >    i | ]\  }}||                                 S r9   )to_json)r  r  r  s      r;   
<dictcomp>z2Backend.generate_depmf_install.<locals>.<dictcomp>M  s&    YYYAaYYYr:   )rX   rh   projectsrc  rd  re  r   develdepmf)r   r   )r   dep_manifest_namer   r=  r>  r?  r   r   r,   r   r   r   r   
get_prefixr@  dep_manifestrt  rj  rw  jsondumpsrp   rg  r   rr  license_mappingr   )rY   r<   
depmf_path
option_dir	ifilename	ofilenameodirnamer   out_dirmfobjr  mr   s                r;   generate_depmf_installzBackend.generate_depmf_install>  s   Z1
)2;II)T`JaJabbJj#..::
::: W\\*lCC

GLL!1!?!?!A!A<PP	GLL!1!<!<!>!>
KK	7<< 0 ; ; = =rwz?Z?Z[[7<<
J77',,z27??:+F+FGG.5YY9P9V9V9X9XYYY[ [)S7333 	'qGGDJu%%&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	
oiHdB*1WF F F 	G 	G 	G(//11 	] 	]A#$#4#4#6#6 ] ]	4GLL488	7<<66oiHd./lSZ\ \ \ ] ] ] ]]	] 	]s   !(HHHc                    t           fd j                                        D                       } j                                        r$|                     j        j        j                   |                     j        j        j                   |	                    d            
                    |           t          |          S )zcList of all files whose alteration means that the build
        definition needs to be regenerated.c                X    g | ]&}t          t          j                  |z            'S r9   )r,   r	   r   )r  dfrY   s     r;   r;  z.Backend.get_regen_filelist.<locals>.<listcomp>]  sG     M M M! tD$566;<< M M Mr:   zmeson-private/coredata.dat)r   r   get_build_def_filesr   r   r  r=  cross_filesconfig_filesr  check_clock_skewr  )rY   r  s   ` r;   get_regen_filelistzBackend.get_regen_filelistZ  s      M M M M%)%5%I%I%K%KM M M N N**,, 	?KK(1=>>>D$-:;;;-...d###Dzzr:   c                   |                                  }t          | j                                        | j                                        |          }t
          j                            | j                                        d          }t          |d          5 }t          j        ||           d d d            d S # 1 swxY w Y   d S )Nzregeninfo.dumpr  )r8  rA   r   r   r   r   r   r   r  rj  r  r  )rY   r  	regeninfor  r  s        r;   generate_regen_infozBackend.generate_regen_infof  s    &&((d.==??".<<>>"$ $	 7<< 0 @ @ B B 02 2(D!! 	&QK	1%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   B>>CC	file_listT.Iterable[str]c                0   dd l }|                                 }|D ]z}t          j                            | j                                        |          }t          j                            |          }||z
  }|dk    rt          d| d|dd          {d S )Nr   gMbP?zClock skew detected. File z has a time stamp z.4fzs in the future.)timer   r   r   r   r   getmtimer   )rY   r<  r?  nowr  absfftimedeltas           r;   r7  zBackend.check_clock_skewp  s     	iikk 	w 	wA7<< 0 > > @ @!DDDG$$T**ECKE u}}$%u$%u%uZ_%u%u%u%uvvv 	w 	wr:   bt4T.Union[build.BuildTarget, programs.ExternalProgram]c                    t          |t          j                  rLt          j                            | j                                        |                     |                    g}n|	                                }|S rk   )
r   r   r  r   r   r   r   r   r  r  )rY   rE  r	  s      r;   build_target_to_cmd_arrayz!Backend.build_target_to_cmd_array  sc    b%+,, 	#7<< 0 > > @ @$BZBZ[]B^B^__`CC..""C
r:   rd  'build.GeneratedList'c                z    g }|D ]5}|dk    r||                                 z  } |                    |           6|S )Nz@EXTRA_ARGS@)get_extra_argsrg  )rY   r  rd  
final_argsr  s        r;   replace_extra_argszBackend.replace_extra_args  sV    "$
 	% 	%AN""g44666

!!!$$$$r:   private_diroutput_listc           	        g }t          j        d          }|D ]}|                    |          }|yt          |                    d                    }d| d}	|                    |	t          j                            |||                             }|                    |          }|y|	                    |           |S )Nz@OUTPUT(\d+)@rG   z@OUTPUT@)
r,  r  searchr   r  r.  r   r   r   rg  )
rY   r  rN  rO  newargsregexr  r/  indexrP  s
             r;   replace_outputszBackend.replace_outputs  s    !
+,, 	  	 CS!!A-AGGAJJ((((kk#rw||KUAS'T'TUULL%%	 -
 NN3r:   D'T.OrderedDict[str, T.Union[build.BuildTarget, build.CustomTarget]]'c                    t                      }| j                                                                        D ]\  }}|j        r|||<   |S rk   )r   r   get_targetsrt  build_by_default)rY   ro  r   bs       r;   get_build_by_default_targetsz$Backend.get_build_by_default_targets  sT    WbWdWdz--//5577 	! 	!GD!! ! tr:   	benchmarkBT.OrderedDict[str, T.Union[build.BuildTarget, build.CustomTarget]]c                T   t                      }|r| j                                        n| j                                        }|D ]}|j        }t          |t          j        t          j        f          r|||                                <   |j	        D ]@}t          |t          j        t          j        f          s)|||                                <   A|j
        D ]L}t          |t          j        t          j        t          j        f          sJ |||                                <   M|S rk   )r   r   r  r  r  r   r  r  rV  r   r   r  )rY   r]  ro  rl   r   r  r  r3  s           r;   get_testlike_targetszBackend.get_testlike_targets  s   U`UbUb1:V$*++---
@T@T@V@V 
	+ 
	+A%C# 2E4EFGG +'*szz||$z + +!#(:E<M'NOO '*szz||$$y + +!#(:E<MuOf'ghhhhh'*szz||$$+ r:   generated_sourcebuild.CustomTargetc                    g }|                                 D ]b}| j                            |          rF|                    t          j                            |                     |          |                     c|S rk   )r  r   
is_libraryrg  r   r   r   r
  )rY   ra  libsr  s       r;   .get_custom_target_provided_by_generated_sourcez6Backend.get_custom_target_provided_by_generated_source  sv    !--// 	T 	TA**1-- TBGLL)<)<=M)N)NPQRRSSSr:   .T.Union[build.BuildTarget, build.CustomTarget]c                    g }|                                 D ]E}t          |t          j                  s|                    |                     |                     F|S rk   )get_generated_sourcesr   r   r  r  rf  )rY   r   re  r   s       r;   $get_custom_target_provided_librariesz,Backend.get_custom_target_provided_libraries  sd    --// 	P 	PAa!344 KKKKANNOOOOr:   c                    g }                                 D ]t          t                    r.t          j                             j        j                  g}nSt          t          j	                  r 
                              g}n!t          t          j        t          j        f          r" fd                                D             }nt          t          j                  r" fd                                D             }nt          t          j                  r                               }nmt          t"          j                  r8                                s
J d            j        
J d            j        g}n                     j                  g}j        r fd|D             }||z  }|S )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.
        c                v    g | ]5}t           j                                                          |          6S r9   )r   r   r   get_custom_target_output_dir)r  r  r6  rY   s     r;   r;  z5Backend.get_custom_target_sources.<locals>.<listcomp>  s8    hhhSTd&G&G&J&JANNhhhr:   c                v    g | ]5}t           j                                                          |          6S r9   )r   r   r   rK  )r  r  rY   r   s     r;   r;  z5Backend.get_custom_target_sources.<locals>.<listcomp>  s8    gggRSd&A&A&&I&I1MMgggr:   zThis shouldn't be possibleNr^  c                ~    g | ]9}t           j                            j                                        |          :S r9   r  )r  r  rY   s     r;   r;  z5Backend.get_custom_target_sources.<locals>.<listcomp>  s8    ZZZqd&6&D&D&F&FJJZZZr:   )get_sourcesr   r,   r   r   r   r   subdirr   r  r  r  r  r  GeneratedListr  r  r   r   r  r  absolute_paths)rY   r   r{  rz   r6  s   ``  @r;   get_custom_target_sourcesz!Backend.get_custom_target_sources  s    ##%% 	 	A!S!! ?d&7JJKAu011 ?11!445A 2E4KLMM ?hhhhhXYXeXeXgXghhhAu233 	?gggggWXWdWdWfWfgggAu566 ?//22Ax788 ?wwyy>>">>>>v)):)))**4+<==>$ [ZZZZTYZZZEMDDr:   .T.Union[build.CustomTarget, build.BuildTarget]rs  c                   g }|j         D ]6}t          |t          j                  r|rX|                    |                    | j                                        | j                                                             w|                    |	                    | j
                             |rQ|                    t          j                            | j                                        |j        |                     |                    t          j                            | j
        |j        |                     8|S rk   )depend_filesr   r   r   rg  r  r   r   r   r  r   r   r   r   rq  )rY   r   rs  r  r6  s        r;   get_target_depend_fileszBackend.get_target_depend_files  s*   $ 	S 	SA!X]++ 
S! FKK0@0O0O0Q0Q040@0N0N0P0P!R !R S S S S KK 1 1$2C D DEEEE! SKKT-=-L-L-N-NPVP]_` a abbbbKKT->q Q QRRRRr:   c                ,    |                      |          S rk   )r
  r  s     r;   rm  z$Backend.get_custom_target_output_dir  s     ""6***r:   c                @    t           j                            |          S rk   r   r   r  )rY   rL  s     r;   get_normpath_targetzBackend.get_normpath_target  s    w'''r:   c                  g }|                                 D ]}t          |t          j        t          j        f          s)|                     |                     |                    }|sd}|r7t          j        	                    | j
                                        |          }||vr|                    |           |S )Nr#  )ri  r   r   r  r  r|  rm  r   r   r   r   r   rg  )rY   r   r0   r  custom_target_include_dirsr6  idirs          r;   get_custom_target_dirszBackend.get_custom_target_dirs  s    24"--// 	8 	8A a%"4e6M!NOO ++D,M,Ma,P,PQQD  Lw||D$4$B$B$D$DdKK555*11$777))r:   c               r    g }|                      |||          D ]}||                    |d          z  }|S )Nr  F)r  r  )rY   r   r0   r  incsr6  s         r;   "get_custom_target_dir_include_argsz*Backend.get_custom_target_dir_include_args  sN     ,,VX],[[ 	8 	8AH--a777DDr:   absolute_outputs.T.Tuple[T.List[str], T.List[str], T.List[str]]c           	     6   | j         }d}|                     |          |ri| j                                        }| j                                        }t
          j                            | j                                                  fd|                                D             }| 	                    |          }g }|j
        D ]}t          |t          j                  r||                     |          z  }6t          |t          j                  rO|                                d         }	t
          j                            |                     |          |	          }nt          |t           j                  r\|                    | j                   }|j        s|r7t
          j                            | j                                        |          }nkt          |t(                    r3d|v r|                    d|          }d|v r|                    d|          }d|v r9|                    dt
          j                            ||j                            }d|v r\|j        d|j        d	}
t3          |
          t
          j                            |j                  }|                    d|          }d
|v r]|                     |          }t          j        |d           |j        s|                     |          }|                    d
|          }n"t;          d| dt=          |                     |                    |           t!          j         ||          }t!          j!        ||          }d |D             }|||fS )Nr#  c                P    g | ]"}t           j                            |          #S r9   r  )r  r6  r{   s     r;   r;  z6Backend.eval_custom_target_command.<locals>.<listcomp>'  s)    IIIq27<<**IIIr:   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@Tr  z	Argument z is of unknown type c                :    g | ]}|                     d d          S )rD  rA  )r.  )r  r6  s     r;   r;  z6Backend.eval_custom_target_command.<locals>.<listcomp>f  s&    111qyys##111r:   )"r   rm  r   r   r   r   r   r   r  rt  commandr   r   r  rH  r  r   r   r  rs  r,   r.  rq  depfiler   r   rM  ri  rK  r   rX   rg  get_filenames_templates_dictsubstitute_values)rY   r   r  source_root
build_rootr  inputsr  r6  tmpr  	dfilenamepdirrr  r{   s                 @r;   eval_custom_target_commandz"Backend.eval_custom_target_command  sx   
 '
226:: 	L*99;;K)7799JW\\$"2"@"@"B"BFKKFIIIIF4F4F4H4HIII//77 %	 %	A!U.// #Qt55a888Au122  Q mmooa(GLL!B!B1!E!EsKKAx}-- Q%%d&788( J,< JT%5%C%C%E%EqIIA As## Q"a''		/;??A!Q&&		.*==A)Q..		"8"',,{TZTa:b:bccA!##~-2v{ 2 2 2,S111 "VV^ D DI		+y99A"a''::6BBDKt4444!0 C#::6BB		/488A"#Oq#O#Od1gg#O#OPPPJJqMMMM6vwGG(f55& 21S111w##r:   c                v    d                     d | j                                        dgz   D                       S )N c              3  >   K   | ]}t          j        |          V  d S rk   )shlexquoter  s     r;   r  z1Backend.get_introspect_command.<locals>.<genexpr>j  s*      ff1Affffffr:   
introspect)r   r   r  rt   s    r;   get_introspect_commandzBackend.get_introspect_commandi  s;    xxff0@0R0R0T0TXdWe0effffffr:   build.RunTargetr   c                   |j         r|j         nt          j                    }|j        r|                    d| j                                        g           |                    d| j                                        g           |                    d|j        g           |                    d| 	                                g           |S )NMESON_SOURCE_ROOTMESON_BUILD_ROOTMESON_SUBDIRMESONINTROSPECT)
r   r   EnvironmentVariablesdefault_envr   r   r   r   rq  r  )rY   r   r   s      r;   get_run_target_envzBackend.get_run_target_envl  s    "JKfjjH,I,K,K 	HGG'$*:*I*I*K*K)LMMMGG&)9)G)G)I)I(JKKKGGNV]O444GG%(C(C(E(E'FGGG
r:   c                n   ddl m} | j                                        | j                                        |                                 d}| j        j        D ][}d                    |j	                  }t          j        d|            |||          }|dk    rt          d| d| d	          \d S )
Nr
   )run_exe)r  r  r  r  zRunning postconf script r   zPostconf script 'z' failed with exit code r#  )scripts.meson_exer  r   r   r   r  r   postconf_scriptsr   r   r   logr   )rY   r  r   r  r   rcs         r;   run_postconf_scriptszBackend.run_postconf_scriptsu  s    //////$($4$C$C$E$E#'#3#A#A#C#C"&"="="?"? 
 , 	` 	`A88AJ''DH888999CBQww$%^$%^%^Y[%^%^%^___ 		` 	`r:   c           
     B   | j                             t          j        d          }|G| j                                         rt          j        d           nt          j        d         d         g}| j         j	        j
                            t          d                    }t          |t          t          f          s
J d            t!          | j                                         | j                                         | j                                         | j                                         ||| j                                         dgz   | j         j	        j                  }|                     |           |                     |           |                     |           |                     |           |                     |           |                     |           |                     |           |                     |           |                     |           |S )Nr~   zFCross file does not specify strip binary, result will not be stripped.r   rf   r^  r  ) r   lookup_binary_entryr   r  r   r   r  r   defaultsr=  r>  r?  r   r   r,   r   rb   r   r   r#  
get_libdirr  rh   r0  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)rY   re   umaskr<   s       r;   create_install_datazBackend.create_install_data  s   $889KWUU	..00 :effff $_W5a89	 )2@@?A[A[\\%#s,,88j888(7799(6688(3355(3355!(::<<~M(19; ; 	##A&&&$$Q'''$$Q'''!!!$$$&&q)))""1%%%%%a(((++A...$$Q'''r:   c                   t           j                            | j                                        d          }t          |d          5 }t          j        |                                 |           d d d            d S # 1 swxY w Y   d S )Nzinstall.datr  )	r   r   r   r   r  rj  r  r  r  )rY   install_data_filer}  s      r;   create_install_data_filesz!Backend.create_install_data_files  s    GLL)9)I)I)K)K][[#T** 	;eK0022E:::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;s   (A==BBr{   c                $   | j                                         }t          || j                                                   }t          || j                                                   }t          || j                                                   }| j         j        j                            t          d                    }t          |t                    s
J d            t          ||          }|r#t          ||t          |          j                  nt          ||          }	||	j        v rdS ||	j        v r|	j        dv rdS |	j        dv rdS n,||	j        v rdS ||	j        v rdS d|	j        v rd	S d
|	j        v rd
S t!          j        d|	           d S )N	localedirr^  runtime>   .pcr&  r   >   r'  r(  i18nzinstalled-testsr  	systemtapzFailed to guess install tag for)r   r#  r	   
get_bindirr  get_includedirr=  r>  r?  r   r   r,   r   parentsrS  rG  r   r  )
rY   rz   r{   rc   r  rd   incdir_ldirr  	dest_paths
             r;   guess_install_tagzBackend.guess_install_tag  s   !,,..fd.99;;<<fd.99;;<<fd.==??@@ )2@@;AWAWXX%%%11z111''	>D]De)9:::$vW\J]J]	Y&&&9y(((=00w!_44 y 5y(((7)+++6)/117IO++;
4i@@@tr:   c                &   | j                                                                         D ]c}|                                s|                                \  }}}t          |          t          |                                          }}|d|hvr>d}t          |                    |j	        ||                                |                    t          |j
                  |k    sJ |                                }	|d         }
|d         }t          |t           j                  rt          |t           j                   }|o|                     |d          }t          |t                     s
J d            |
dur~|j
        d         pt          |t           j                  rdnd}|                    |j                  }t'          |                     |          |
||||j        |j        |	|j        ||	          }|j                            |           |                                D ]Z\  }}}t6          j                            |
|          }t=          |||
|j        |d
          }|j                            |           [t          |t           j         t           j!        t           j"        f          rB|#                                r|r|
}n| j$        %                                }t'          | &                    |          ||di tO                      d|	|j        t          |t           j!                  d          }|j                            |           |s|(                                rt6          j                            | )                    |          |(                                          }t'          ||
|di tO                      d|	|j        d
d          }|j                            |           |dk    rtU          |                                dd          |dd          |dd          |j
        dd                    D ]\  }}}}|du rt6          j                            | )                    |          |          }t'          |||di tO                      d |	|j        |
  
        }|j                            |           t          |t           j+                  r|dk    r|dk    r|
durtU          |                                |j
                  D ]\  }}|p| ,                    ||
          }t6          j                            | )                    |          |          }t'          ||
|di tO                      d |	|j        |j-         |          }|j                            |           tU          |                                |||j
                  D ]\  }}}}|du r|p| ,                    ||          }t6          j                            | )                    |          |          }t'          |||di tO                      d |	|j        |j-         |          }|j                            |           ed S )NrG   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~   r^  Fr   r  )r   r   T)r   r   )r   r   r   ).r   rY  rr  should_installget_install_dirr  r  r   formatr   install_tagget_custom_install_moder   r  r0  rs  r}   get_link_deps_mappingrc   ry   r  r   r   r   rl   rg  get_aliasesr   r   r   r   rq   r(  SharedModuler2  r)  r   get_import_lib_dirr6  r   r  r
  zipr  r  rZ  )rY   r<   r   outdirsinstall_dir_namescustom_install_dirnum_outdirsnum_outr/  r   first_outdirfirst_outdir_namer   should_stripr   mappingsr6  aliastor  implib_install_dir
debug_fileoutputr{   r|   r  s                             r;   r  zBackend.generate_target_install  s   ''))0022 {	, {	,A##%% =>=N=N=P=P:G&(:#&w<<Q]]__1E1EK1g,..N %QXXafgq}}P[%\%\]]]q}%%00004466L"1:L 1! 4 !U.// i, !+1e.A B BB	(OT-C-CAw-O-O!,55AAzAAA  u,,-*l*QH[:\:\/kwwbkC 66qx@@H)$*B*B1*E*E|*;*6!BX*+/<.1Y	H H HA
 I$$Q'''*+--// - -r3 "\5 A A.r5,VYimnnn
))!,,,,!!e&95;MuO_%`aa 0 0022 01 [ 6B 2 2595E5X5X5Z5Z 2 1$2V2VWX2Y2Y2DFW27SUUB23,TUW\WiIjIj6=	!? !? !?A
 I,,Q///+ 00D0D0F0F 0)+d6I6I!6L6LaNbNbNdNd)e)eJ 1*l2C27SUUB2>;?W	!N !N !NA
 I,,Q///??<?PQPRPR@SU\]^]_]_U`bstutvtvbwyz  zG  HI  HJ  HJ  zK  =L  =L , ,8S!U??$GLL)<)<Q)?)?HH-aeRQTQVQVX\.:AL257 7 7 	((++++Au122  , !##!#500+.q}}+N+N 0 0KFC"%"U)?)?)U)UC "T-@-@-C-CV L LA 1!\CT27SUUD,23,QM_I_69!; !; !;A I,,Q////<?QXZkmnmz<{<{ 
, 
,8S!U??$!KT%;%;FF%K%KGLL)<)<Q)?)?HH-a.3Rl./lI[E[257 7 7 	((++++w{	, {	,r:   c                    | j         j        |_        |j        D ]6}|j        s-t          j        dd                    |j                             7d S )Nz/Failed to guess install tag for install script:r  )r   rr   r   r   r  r   r   )rY   r<   r6  s      r;   r  z&Backend.generate_custom_install_script@  s^     J6" 	d 	dA5 d
LchhWXWaNbNbccc	d 	dr:   c                   | j                                         }| j                                        }| j                                         }| j                                         }|D ]}|                                x}}|[|                                }	|	|}d}n@t          j	        
                    ||	          }t          j	        
                    d|	          }|                                D ]d}
|
                    ||          }t          ||||                                |j        d|j                  }|j                            |           ed S )Nz{includedir}r   )r   r   )r   r  r   get_headersr   r   get_custom_install_dirget_install_subdirr   r   r   rp  r  r   r  r   r   rm   rg  )rY   r<   incrootrm   r2  builddirhr{   r|   rq  r  abspathr6  s                r;   r  zBackend.generate_header_installF  s[   "1133*((**!0022#1133 	$ 	$A#$#;#;#=#==F[~--//>$F"0KKW\\'6::F"$',,~v"F"FK]]__ $ $//&(;;#GV[!B[B[B]B]_`_kqx  KL  K\  ]  ]  ]	  ####$	$ 	$r:   c           
        | j                                         }| j                                        }|D ]}|                                D ]}|                    d          d         }|                                }|T|j        r*t          j	        
                    d|j        d|z             }n#t          j	        
                    dd|z             }|j        }|j        r|                    d|j         d          }|                    | j                                         | j                                                   }	t          j	        
                    |t          j	                            |                    }
|
                    d|          }t#          |	||
|                                |j        d          }|j                            |           d S )Nr#  r  z{mandir}rn   r   r  )r   
get_mandirr   get_manrp  r  r  localer   r   r   rz   r.  r  r   r   r   r   r  r   rn   rg  )rY   r<   manrootrn   r/  r  numrq  rz   srcabsdstnamedstabsr6  s                r;   r  zBackend.generate_man_install\  s   "--//j  "" 	  	 A]]__    ggcll2&1133>x G!#j!(ECK!P!P!#j%#+!F!F8 >!MM.ah.."==E)9)H)H)J)JDL\LjLjLlLlmm',,vrw/?/?/F/FGG W==#FFGQ=V=V=X=XZ[ZflqrrrQ 	  	 r:   c                    | j                                         }|D ]^}|j        p|                     |j                  }t          |j        |j        |j        |          }|j        	                    |           _d S rk   )
r   get_emptydirr  r  r   r   r   r   ro   rg  )rY   r<   ro   r  r   r6  s         r;   r  z!Backend.generate_emptydir_installq  s|    +/:+B+B+D+D 	! 	!A-A4#9#9!&#A#ACcJJAJa    	! 	!r:   c                   | j                                         }| j                                        }| j                                        }|D ]}t          |t           j                  sJ |j        }|j        }t          |j
        |j                  D ]\  }}	t          |t          j                  sJ t          j                            ||	          }
t          j                            ||	          }|j        p|                     |
          }t'          |                    ||          |
||j        |j        ||j        |j                  }|j                            |           א d S )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   rp   rg  )rY   r<   rp   r2  r  derq  subdir_namesrc_filedst_namedst_absdstdir_namer   r6  s                 r;   r  zBackend.generate_data_installx  s^   z""$$!0022#1133 	! 	!Bb%*-----^F-K&)"*bi&@&@ ! !"(!(HM:::::',,vx88 gll;AAnG(>(>w(G(G#H$:$:68$L$LgWb$&OR]WYWc464FH H H a    !		! 	!r:   c                x   | j                                         }|D ]}t          |t           j                  sJ |j        }t
          j                            ||j                  }|j	        p| 
                    |          }t          |j        |||j        |          }|j                            |           d S rk   )r   get_symlinksr   SymlinkDatar  r   r   r   r   r  r  r   r   r   rq   rg  )rY   r<   linksr  r  name_absr   r  s           r;   r  z Backend.generate_symlink_install  s    +/:+B+B+D+D 	! 	!Aa!233333-Kw||K88H-C4#9#9(#C#CC"18X{ALRUVVAJa    	! 	!r:   c                ,   | j                                         D ]}|j        r| j                                        }n| j                                        }t          j                            ||j	        |j
                                      d          }t          j                            | j                                        |j                  }t          j                            d|j                  }|j        |j        k    r|j        }|j        szt          j                            |t          j                            |                    }t          j                            |t          j                            |                    }|j        p7|                     t          j                            |j        d                    }t'          ||||j        |j        |j        ||j                  }|j                            |           d S )NrA  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   rs   rg  )	rY   r<   sdfrom_dirsrc_dirdst_dirr  r   r6  s	            r;   r  zBackend.generate_subdir_install  s   *0022 	( 	(B! <+::<<+99;;gll8#%#3#%#8: ::@&++  gll4#3#>#>#@#@#%>3 3Gw||J??H~!444.% M',,w0@0@0I0IJJ7<<"'2B2B72K2KLL.aD$:$:27<<X_;`;`$a$aC!'7Hborz[][hjm242DF F FA$$Q'''''	( 	(r:   	target_id!T.List['TargetIntrospectionData']c                    t          |t          j        t          j        f          r|j        }g }|D ]ʊt          t
          j                  r%|                     j         j	                  gz  }At          t                    r*|t          j                             j                  gz  }t          t          j        t          j        f          r$| fd                                D             z  }d |D             }g }t          |t          j                  r|j        }|D ]t          t
          j                  r%|                     j         j	                  gz  }At          t                    r|gz  }]t          t          j        t          j        f          r|                                z  }t!          dt#                    j         d          d|g |g dgS g S )aK  
        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.
        c                    g | ]:}t           j                            j                                        |          ;S r9   )r   r   r   rC   r  )r  rB  jrY   s     r;   r;  z2Backend.get_introspection_data.<locals>.<listcomp>  s7    #m#m#mXYBGLLQR$S$S#m#m#mr:   c                L    g | ]!}t           j                            |          "S r9   r{  )r  r  s     r;   r;  z2Backend.get_introspection_data.<locals>.<listcomp>  s(    DDD127++A..DDDr:   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  rB   rC   r,   r   r   r   r  r  r   rX   r5   )rY   r  r   source_list_rawsource_listr0   tmp_compilerr  s   `      @r;   get_introspection_datazBackend.get_introspection_data  s*    fu153DEFF 	$nOK$ n na// nAOODOT^$T$T#UUKK3'' nBGLL!$D$D#EEKKE$68I#JKK n#m#m#m#m#m]^]j]j]l]l#m#m#mmKDDDDDK$&H&%"455 
C%~% C CA!!X]33 C Q__T_dn%U%U$VV#As++ C QC#A(95;M'NOO C AMMOO3*  ,BDGG4D  ,B  ,B  ,B  C  C  C &$ &%'    	r:   c                   t                      }t                      }| j        j        t          j                 }| j                                                                        D ]g}|j        t          j        us|	                                s+|
                                s|                                rOt          |t
          j        t
          j        f          r)|                    |                     |g                      |                                d         rt$          j                            | j                                        |                     |                    }t          |t
          j                  r|                    |           8t          |t
          j                  r|                    |           i| j                            ||          S )Nr
   )r   r   r  r   r  r   rY  rr  r  r  r  r  r   r2  r  r  r  r  r   r   r   r   r
  r  r(  get_env_for_paths)rY   r   library_pathshost_machiner   tdirs         r;   
get_devenvzBackend.get_devenv  s   ee'01CD''))0022 	( 	(A}M$666a>N>N>P>P6'')) P\-C-C-E-E P:VWZ_Zjlql~Y  LA  LA P $$T%G%G2%N%NOOO  ""1% 7<< 0 > > @ @$BUBUVWBXBXYYD!U-.. 
( %%%%Au233 ( !!$'''11-MMMr:   @OUTPUT@r  @INPUT@r  r  T.Union[str, None]extrasT.Union[T.List[str], None]inputr   c                   |                      ||          }|r||                    ||          z  }||                    |          z  }||                     ||          z  }||                     ||          z  }||                                z  }||                     |                    |                                                    z  }|||z  }||gz  }|S )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_argsr!  r$  get_compile_only_argsr  rK  rv  )rY   r   r0   r  r  r)  r+  r  s           r;   compiler_to_generator_argsz"Backend.compiler_to_generator_args  s     44VXFF 	J88IIIHH,,V444D44VXFFFD33FHEEEH22444 	D**6+@+@AVAVAXAX+Y+YZZZ HUGr:   langnamec                R    t           D ]}|| j        j        j        |         v r dS dS r  )r   r   r=  rq  )rY   r1  r  s      r;   have_languagezBackend.have_language  s<    ( 	 	K4+4>{KKKtt Lur:   r2   _ALL_SOURCES_TYPEoutput_templr   [T.Optional[T.List[T.Union[build.BuildTarget, build.CustomTarget, build.CustomTargetIndex]]]build.GeneratedListc                6   t          j        |                                          }|                                }|                     ||          }t          j        |||                                z   |gd|          }	|	                    || j	                  S )z
        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  r0  r   	Generator	to_nativeprocess_filesr   )
rY   r   r0   r2   r5  r   r  r  r  	generators
             r;   compiler_to_generatorzBackend.compiler_to_generator  s     &x'7'7'9'9::$$&&2268DDOC0B0B0D0D)D%1NO,35 5 5	 &&w0@AAAr:   build.CompileTargetc                    t          j        d|j                  t          j        d|j                  z   }|                     ||j        ||j        |j                  S )Nr4  )r  r  r2   	generatedr=  r0   r5  r   )rY   r   all_sourcess      r;   compile_target_to_generatorz#Backend.compile_target_to_generator0  sY    f0&.AAAFK^`f`pDqDqq))&&/;*0*=v~O O 	Or:   c                    t          |t          j                  rdS |                     |d          }|dk    rdS |dk    rdS |dk    r|j        dk    S t          d|           )	NFunityonToffsubprojectsr   z1Internal error: invalid option type for "unity": )r   r   rS  rs  r   r   )rY   r   vals      r;   rm  zBackend.is_unity5  s~    fe122 	5$$VW55$;;4%<<5-$**VQTVVWWWr:   r   T.Union[str, OptionKey]r'   c                    t          |t                    rt          ||j                  }n't          |t                    r|}nt	          d          | j        j                            ||          S )N)r   z$Internal error: invalid option type.)r   r,   r   r   r   r   r=  get_option_for_target)rY   r   r   r  s       r;   rs  zBackend.get_target_optionA  sq    dC   	LDV->???CCi(( 	LCC#$JKKK(>>vsKKKr:   )r   r   r   r   )FN)r   r}   r   r   rJ   r   )r   r  r   r}   rJ   r,   )r   r  rJ   r,   )r   r  rJ   r   )r   r  r0   r  r  r}   rJ   r/   )r   r  rJ   r   )r   rA  rB  rA  rJ   r,   )r   rA  rJ   r,   )r   rI  rJ   r,   )r   rI  rN  rO  rP  r,   rJ   r,   )r   rI  rS  r,   rT  r   rJ   rU  )r   r  rZ  r,   rJ   r[  )r  r,   r  r,   rJ   r,   )r   )r   r  r  r,   rJ   r  )r  r  rJ   r/   )r   r  r  r  r  r,   rJ   r  )r   r  rJ   r}   )r   r  rJ   r/   )NNNNNNFN)r  r  r   r   r  r  r   r   r  r   r   r  r   r   r   r}   r  r  rJ   r  )NNNNFNF)r  r  r   r  r   r   r  r  r   r   r  r   r  r}   r   r  r   r}   rJ   r  )rJ   r  )r   r  rJ   r  )rd   r,   rq  r   r   r  rJ   r}   )r   r  rJ   r  )r  r/   rJ   r  )T)r   r  r   r}   rJ   r!  )r   rI  rJ   r7  )rz   r,   rJ   r,   rk   )
r   r  r0   r    rL  rM  rN  r   rJ   r,   )r_  r`  rJ   r/   )r0   r  r   r  rJ   r/   )r  r,   ri  r/   rJ   r,   )r   r  r  r,   r}  r,   rJ   r,   )r  r/   rJ   r/   )r   r  r0   r  rJ   r/   )r   r  r0   r  rJ   r  )r0   r  r  r  rJ   r/   )r  r,   rJ   r   )r   r  r  r  rJ   r/   )r  r  rJ   ri   )r  r  rJ   r  )r  r  r  r  rJ   ri   )r   r  r   r   rJ   r/   )r<   rb   rJ   ri   )rJ   r/   rv   )r<  r=  rJ   ri   )rE  rF  rJ   r/   )r  r/   rd  rI  rJ   r/   )r  r/   rN  r,   rO  r/   rJ   r/   )rJ   rW  )F)r]  r}   rJ   r^  )ra  rb  rJ   r!  )r   rg  rJ   r!  )r   rb  rJ   r/   )r   ru  rs  r}   rJ   r/   )rL  r,   rJ   r,   )r   rb  r0   r  r  r}   rJ   r/   )r   rb  r  r}   rJ   r  r[   )r   r  rJ   r   )rJ   rb   )rz   r,   r{   r   rJ   r   )r  r,   r   rA  rJ   r  )rJ   r   )r&  r  Nr'  )r   r  r0   r  r  r,   r  r(  r)  r*  r+  r,   rJ   r   )r1  r,   rJ   r}   )r   r  r0   r  r2   r4  r5  r,   r   r6  rJ   r7  )r   r>  rJ   r7  )r   r  r   rI  rJ   r'   )dr5   r6   r7   r8   r   r   r   r  r  r  r  r!  r$  r6  r   r
  rF  rH  rK  rM  rR  rY  r  staticmethodr   r  r  r  r  r  r  r  r  r  r  r  r  r0  r>  rK  r^  r  rz  rl  r  rj  r  r  r  r  r  r  r\   r  r  r  r  r  r  r  r0  r8  r;  r7  rH  rM  rV  r\  r`  rf  rj  rt  rx  rm  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r%  r0  r3  r=  rB  rm  rs  r9   r:   r;   r   r   
  s 
        ****DP P P P2T T T T T sw > > > > > >` ` ` `   f f f f uz 9 9 9 9 9 9 ty 8 8 8 8 8 8X X X X0 Yt   7 7 7 7! ! ! !^ ^ ^ ^c c c c YtF F F F X X X X( ( ( (T H H H \H3 3 3 3 3
- - - -! ! ! !F    \    (,AE'+$(=A#'!;?Fa Fa Fa Fa FaT 9=RV8<595:NR-2_$ _$ _$ _$ _$B) ) ) )       \8 8 8 8    \B Yt' ' ' ' 'T    Yt    \, , , , ,\ Yt7 7 7 7r" " " "4 4 4 4       "       \   
W W W Wr   0   " Yt    \4 Yt    [4!9 !9 !9 !9FM M M MH H H HW W W WrE E E E   &] ] ] ]8
 
 
 
& & & &w w w w                   Yt    Yt      :     + + + + Yt( ( ( ( 6;* * * * * *( #(      HML$ L$ L$ L$ L$\g g g g   ` ` ` `   >; ; ; ;
    6|, |, |, |,|d d d d$ $ $ $,       *! ! ! !! ! ! !$! ! ! !( ( ( (,0 0 0 0dN N N NB HRALHL09	    8    FJ	B B B B B$O O O O

X 
X 
X 
XL L L L L Lr:   r   )NN)r   r,   r   r   r   r   rJ   r   )r   r,   r   r   r   r   rJ   r   )W
__future__r   collectionsr   dataclassesr   r   	functoolsr   	itertoolsr   pathlibr	   r  enumr%  r   r  r,  r  r  typingr  r  r   r   r   r   r   r   rq  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  r4  r+   rn  rA   EnumrF   r^   rb   ry   r   r   r   r   r   r   r   r   r9   r:   r;   <module>r^     s   # " " " " " # # # # # # * * * * * * * *                      				  				                                      F F F F F F F F F F                               ? '//////&&&&&&$$$$$$))))))////////......1111111100000088888888qwtU-?AXZ_Zm'mno' ' ' ' ') ' ' ' , 
e       
    49   < e        e= = = = = = = =, eP P P P P P P P( e                e- - - - - - - - e                       eJ J J J J J J J8" " " " "J    ~L ~L ~L ~L ~L ~L ~L ~L ~L ~Lr:   