
    e                   n	   d dl mZ d dlmZmZ d dlmZmZ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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mZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z. ddl/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 ddl8m9Z9m:Z: ej;        rd dl<m=Z=m>Z> ddlm?Z? ddl@mAZA ddlBmCZC ddl/mDZD ddlEmFZFmGZG ddlHmIZI ddl8mJZJ ddlKmLZL ddlmMZMmNZNmOZO ddlPmQZQ ddlRmSZS ddlTmUZU ejV        d         ZWejV        d         ZXejV        d         ZYejV        eZddd f         Z[ G d! d"e>          Z\d#d$hZ]d% e5D             Z^e^h d&z  Z^h d'Z_d(d)hZ`d*d+hZah d,Zbebe^z  e]z  e_z  e`z  eaz  Zcech d-z  Zdech d.z  Zeecd/d0hz  Zfech d1z  Zgedd2d3hz  Zhdd:Zi e
d;          dd=            Zj G d> d?e          Zk ed@A           G dB dCe                      Zl ed@A           G dD dEe                      Zm ed@A           G dF dGe                      Zn ed@A           G dH dIe                      Zo ed@A           G dJ dKe                      Zp ed@A           G dL dM                      Zq G dN dO          Zr ed@A           G dP dQe                      Zs ed@A           G dR de                      Zt ed@d@S           G dT dUe                      Zu ed@A           G dV dWeejv        X                      Zw G dY dZew          Zx G d[ d\          Zy G d] d^          Zz G d_ d`e          Z{ ed@A           G da dbe                      Z| G dc ddex          Z} G de dfex          Z~ G dg dhex          Z G di dje          Z G dk dle          Z G dm dn          Z G do dp          Z G dq drewee          Z G ds dtex          Z G du dvewe          Z G dw dxe          Z G dy dzex          Z ed@A           G d{ d|ee                      Z G d} d~e          Z ed@A           G d de                      Z ed@A           G d de                      Z ed@A           G d d                      Zd ZddZddZdS )    )annotations)defaultdictOrderedDict)	dataclassfieldInitVar)	lru_cacheN   )coredatadependencies)mlog)programs)HoldableObjectSecondLevelHolderFileMesonExceptionMachineChoice
PerMachine
OrderedSetlistifyextract_as_listtypeslistifystringlistifyclassify_unity_sourcesget_filenames_templates_dictsubstitute_valueshas_path_sep	OptionKeyPerMachineDefaultableMesonBugExceptionEnvironmentVariablespickle_load)	is_header	is_object	is_sourceclink_langs
sort_clinkall_languagesis_known_suffixdetect_static_linker)
FeatureNewFeatureDeprecated)Literal	TypedDict)environment)ImmutableListProtocol)Backend)Compiler)SourceOutputsInterpreter)Test)
SubProject)StaticLinker)ExecutableSerialisationFileModeFileOrString)ModuleState)BaseNode)WrapMode)CustomTargetCustomTargetIndexGeneratedList)SharedLibraryStaticLibraryr?   r@   )BuildTargetr?   r@   r   ExtractedObjectsGeneratedTypesc                  8    e Zd ZU ded<   ded<   ded<   ded<   dS )		DFeaturesboolunittestzT.List[T.Union[str, int]]debugT.List[IncludeDirs]import_dirsversionsN__name__
__module____qualname____annotations__     5/usr/lib/python3.11/site-packages/mesonbuild/build.pyrH   rH   C   s?         ((((((((++++++rU   rH   c_pchcpp_pchc                    h | ]}| d S )_argsrT   ).0langs     rV   	<setcomp>r]   L   s    <<<dd>>><<<rU   >   d_debug
d_unittestd_import_dirsd_module_versions>   vala_gir	vala_vapivala_headerrust_crate_typerust_dependency_map	resourcescs_args>   nativegui_appinstallobjectssources	link_args	link_with
link_wholebuild_rpathextra_filesinstall_dirinstall_tagname_prefixname_suffixr   install_modelink_dependsinstall_rpathlink_languagewin_subsystembuild_by_defaultoverride_optionsinclude_directoriesgnu_symbol_visibilityimplicit_include_directories>   pieimplibexport_dynamicvs_module_defs>   versionrust_abi	soversionr   darwin_versionsr   r   >   picprelinkr   
main_classjava_resourcesrt   #T.Optional[T.List[T.Optional[str]]]num_outputsintreturnT.List[T.Optional[str]]c                N    | sd g|z  }nt          |           dk    r| |z  }n| }|S )Nr
   )len)rt   r   _install_tags      rV   _process_install_tagr      sD      #v+	[		Q		"[0"rU   maxsizestrc                    d| j         | j        g}| j        |                    d| j        z              |                    d           d                    |          S )Nz@rpath/..dylib )prefixnamer   appendjoin)ldr   s     rV   #get_target_macos_dylib_install_namer      sU    ry"'*D	|C",&'''KK774==rU   c                      e Zd ZdS )InvalidArgumentsN)rP   rQ   rR   rT   rU   rV   r   r      s        DrU   r   F)eqc                  2    e Zd ZU ded<   ded<   dZded<   dS )	DependencyOverridezdependencies.Dependencydepz
'BaseNode'nodeTrI   explicitN)rP   rQ   rR   rS   r   rT   rU   rV   r   r      s;             HrU   r   c                  x    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dZddZddZddZddZ	d
S )HeadersT.List[File]rm   T.Optional[str]install_subdircustom_install_dir
'FileMode'custom_install_moder   
subprojectNT.Optional[bool]follow_symlinkssubdirr   Nonec                    || _         d S Nr   )selfr   s     rV   set_install_subdirzHeaders.set_install_subdir   s    $rU   c                    | j         S r   r   r   s    rV   get_install_subdirzHeaders.get_install_subdir       ""rU   c                    | j         S r   rm   r   s    rV   get_sourceszHeaders.get_sources   
    |rU   c                    | j         S r   r   r   s    rV   get_custom_install_dirzHeaders.get_custom_install_dir       &&rU   c                    | j         S r   r   r   s    rV   get_custom_install_modezHeaders.get_custom_install_mode       ''rU   )r   r   r   r   r   r   r   r   r   r   )
rP   rQ   rR   rS   r   r   r   r   r   r   rT   rU   rV   r   r      s         ####''''####OOO(,O,,,,
% % % %# # # #   ' ' ' '( ( ( ( ( (rU   r   c                  Z    e Zd ZU ded<   ded<   ded<   ded<   ded	<   ddZddZddZdS )Manr   rm   r   r   r   r   r   r   localer   c                    | j         S r   r   r   s    rV   r   zMan.get_custom_install_dir   r   rU   c                    | j         S r   r   r   s    rV   r   zMan.get_custom_install_mode   r   rU   T.List['File']c                    | j         S r   r   r   s    rV   r   zMan.get_sources   r   rU   Nr   r   )r   r   )rP   rQ   rR   rS   r   r   r   rT   rU   rV   r   r      s         ''''####OOO' ' ' '( ( ( (     rU   r   c                  <    e Zd ZU ded<   ded<   ded<   dZded<   dS )	EmptyDirr   pathr   rw   r   Nr   rt   )rP   rQ   rR   rS   rt   rT   rU   rV   r   r      sA         IIIOOO#'K''''''rU   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Zd
ed<   dZded<   dZded<   dS )
InstallDirr   source_subdirinstallable_subdirrs   install_dir_namer   rw   zT.Tuple[T.Set[str], T.Set[str]]excluderI   strip_directoryr   Tfrom_source_dirNr   rt   r   r   )rP   rQ   rR   rS   r   rt   r   rT   rU   rV   r   r      s         ,,,,OOO O    #'K''''(,O,,,,,,rU   r   c                  @    e Zd ZU ded<   ded<   ded<   ded<   dd
ZdS )DepManifestr   r   T.List[str]licensezT.List[T.Tuple[str, File]]license_filesr   r   &T.Dict[str, T.Union[str, T.List[str]]]c                @    | j         | j        d | j        D             dS )Nc                B    g | ]}|d                                           S )r
   )relative_namer[   ls     rV   
<listcomp>z'DepManifest.to_json.<locals>.<listcomp>   s(    OOOqad0022OOOrU   r   r   r   r   r   s    rV   to_jsonzDepManifest.to_json   s/    ||OOD<NOOO
 
 	
rU   N)r   r   )rP   rQ   rR   rS   r   rT   rU   rV   r   r      sT         LLL----OOO
 
 
 
 
 
rU   r   c                      e Zd ZdZd-dZd Zd Zd.dZd/dZd0dZ	d Z
d Zd1dZd2dZd2dZd3dZd4dZd5dZd6dZd7dZd8d!Zd9d&Zd:d)Zd9d*Zd:d+Zd,S );BuildzYA class that holds the status of one build including
    all dependencies and so on.
    r0   environment.Environmentc                6   t           j        | _        d| _        d | _        || _        i | _        t                      | _        t                      | _	        t          i i           | _        t          i i           | _        t          i i           | _        t          i i           | _        g | _        g | _        g | _        g | _        g | _        g | _        g | _        t          d d           | _        i | _        d| _        g | _        g | _        g | _        g | _        d | _        i | _        t          i i           | _        i | _         d | _!        i | _"        t                      | _#        tI          j%         |j&                    i i           | _'        g | _(        g | _)        d S )Nzname of master projectr   )*r   r   project_nameproject_versionr0   projectsr   targetssettargetnamesr   global_argsglobal_link_argsprojects_argsprojects_link_argstests
benchmarksheadersmanemptydirdatasymlinksstatic_linkersubprojectssubproject_dirinstall_scriptspostconf_scriptsdist_scriptsinstall_dirsdep_manifest_namedep_manifeststdlibstest_setupstest_setup_default_namefind_overridessearched_programsr    defaultis_cross_builddependency_overridesdevenvmodules)r   r0   s     rV   __init__zBuild.__init__   s   '4#&Q\Q^Q^58UUAKBPRASASFPQSUWFXFXPZ[]_aPbPbU_`bdfUgUg%'
*,(* "*,"$	-/7A$7M7M BDCE?A022668!"b))35'+$vx-0UU VkUr&K&(("bV2 V2!46$&rU   c                    t                      }| j                                        D ]\  }}t          |t                    r|||<    |S r   )r   r   items
isinstancerD   )r   build_targetsr   ts       rV   get_build_targetszBuild.get_build_targets!  sO    #|))++ 	( 	(GD!![)) (&'d#rU   c                    t                      }| j                                        D ]\  }}t          |t                    r|||<    |S r   )r   r   r  r  r?   )r   custom_targetsr   r  s       rV   get_custom_targetszBuild.get_custom_targets(  sO    $|))++ 	) 	)GD!!\** )'(t$rU   r   c                
   t          | j                  }| j                                        D ]T\  }}t	          |t
          t          t          t          f          r|	                                |j        |<   J||j        |<   U|S r   )
r   r0   __dict__r  r  listdictr   r   copyr   otherkvs       rV   r&  z
Build.copy/  sy    d&''M'')) 	& 	&DAq!dD#{;<< &$%FFHHq!!$%q!!rU   r(  r   c                X    |j                                         D ]\  }}|| j         |<   d S r   )r#  r  r'  s       rV   mergezBuild.merge8  s<    N((** 	! 	!DAq DM!	! 	!rU   compilerr3   c                    | j         |j                 8|                                r&t          | j        |          | j         |j        <   d S d S d S r   )r  for_machineneeds_static_linkerr+   r0   )r   r-  s     rV   ensure_static_linkerzBuild.ensure_static_linker<  sV    h23;@\@\@^@^;7KDL\^f7g7gDx3444 <;;;rU   c                    | j         d         S )Nr   )r   r   s    rV   get_projectzBuild.get_project@  s    }R  rU   c                    | j         S r   )r  r   s    rV   get_subproject_dirzBuild.get_subproject_dirC  r   rU   8'T.OrderedDict[str, T.Union[CustomTarget, BuildTarget]]'c                    | j         S r   )r   r   s    rV   get_targetszBuild.get_targetsF  r   rU   T.List['Test']c                    | j         S r   )r   r   s    rV   	get_testszBuild.get_testsI  
    zrU   c                    | j         S r   )r   r   s    rV   get_benchmarkszBuild.get_benchmarksL  
    rU   T.List['Headers']c                    | j         S r   )r   r   s    rV   get_headerszBuild.get_headersO  r   rU   T.List['Man']c                    | j         S r   )r  r   s    rV   get_manzBuild.get_manR  	    xrU   T.List['Data']c                    | j         S r   )r  r   s    rV   get_datazBuild.get_dataU  
    yrU   T.List['SymlinkData']c                    | j         S r   )r  r   s    rV   get_symlinkszBuild.get_symlinksX  
    }rU   T.List['EmptyDir']c                    | j         S r   )r  r   s    rV   get_emptydirzBuild.get_emptydir[  rN  rU   T.List['InstallDir']c                    | j         S r   )r  r   s    rV   get_install_subdirszBuild.get_install_subdirs^        rU   
'Compiler'r/  'MachineChoice'r   c                l    | j         |         }|                    |                                g           S r   )r   getget_languager   r-  r/  ds       rV   get_global_argszBuild.get_global_argsa  s/    [)uuX**,,b111rU   projectr   c                    | j         |         }|                    |          }|sg S |                    |                                g           S r   )r   rY  rZ  )r   r-  r^  r/  r\  argss         rV   get_project_argszBuild.get_project_argse  sK    {+uuW~~ 	Ixx--//444rU   c                l    | j         |         }|                    |                                g           S r   )r   rY  rZ  r[  s       rV   get_global_link_argszBuild.get_global_link_argsl  s/    !+.uuX**,,b111rU   c                    | j         |         }|                    |          }|sg S |                    |                                g           S r   )r   rY  rZ  )r   r-  r^  r/  r\  rn   s         rV   get_project_link_argszBuild.get_project_link_argsp  sK    #K0EE'NN	 	I}}X2244b999rU   N)r0   r   )r   r   )r(  r   r   r   )r-  r3   r   r   )r   r6  )r   r9  )r   r@  )r   rC  )r   rG  )r   rK  )r   rO  )r   rR  )r-  rV  r/  rW  r   r   )r-  rV  r^  r   r/  rW  r   r   )rP   rQ   rR   __doc__r  r  r!  r&  r,  r1  r3  r5  r8  r;  r>  rB  rE  rI  rM  rQ  rT  r]  ra  rc  re  rT   rU   rV   r   r      s        '' '' '' ''R       ! ! ! !h h h h! ! !# # #                        ! ! ! !2 2 2 25 5 5 52 2 2 2: : : : : :rU   r   c                  |    e Zd ZU dZded<   ded<   ded<    ee          Zded	<   ddZddZ	ddZ
ddZddZdS )IncludeDirsz7Internal representation of an include_directories call.r   curdirr   incdirsrI   	is_systemdefault_factoryextra_build_dirsr   c                \    d}|                     | j        j        | j        | j                  S )Nz
<{} {}/{}>)format	__class__rP   ri  rj  r   rs     rV   __repr__zIncludeDirs.__repr__  s&    xx/dlKKKrU   c                    | j         S r   )ri  r   s    rV   
get_curdirzIncludeDirs.get_curdir  
    {rU   c                    | j         S r   )rj  r   s    rV   get_incdirszIncludeDirs.get_incdirs  r   rU   c                    | j         S r   )rn  r   s    rV   get_extra_build_dirsz IncludeDirs.get_extra_build_dirs  s    $$rU   	sourcedirbuilddirc                   g }| j         D ]t}|                    t          j                            || j        |                     |                    t          j                            || j        |                     u|S )a*  Convert IncludeDirs object to a list of strings.

        :param sourcedir: The absolute source directory
        :param builddir: The absolute build directory, option, build dir will not
            be added if this is unset
        :returns: A list of strings (without compiler argument)
        )rj  r   osr   r   ri  )r   r|  r}  strlistidirs        rV   to_string_listzIncludeDirs.to_string_list  sp      "L 	F 	FDNN27<<	4;EEFFFNN27<<$+tDDEEEErU   Nr   r   r   r   )r|  r   r}  r   r   r   )rP   rQ   rR   rf  rS   r   r$  rn  rt  rv  ry  r{  r  rT   rU   rV   rh  rh  y  s          BAKKKOOO %*E$$?$?$?????L L L L      % % % %     rU   rh  c                      e Zd ZU dZded<    ee          Zded<    ee          Zded<    ee          Z	d	ed
<   dZ
ded<   dZded<   d dZd!dZed"d            Zd#dZd dZdS )$rE   zI
    Holds a list of sources for which the objects must be extracted
    z'BuildTarget'targetrl  r   srclistT.List['GeneratedTypes']genlist0T.List[T.Union[str, 'File', 'ExtractedObjects']]objlistTrI   	recursiveFpchr   r   c                J    | j         j        r|                                  d S d S r   )r  is_unitycheck_unity_compatibler   s    rV   __post_init__zExtractedObjects.__post_init__  s1    ; 	*'')))))	* 	*rU   r   c                f    d}|                     | j        j        | j        j        | j                  S )Nz<{0} {1!r}: {2}>)rp  rq  rP   r  r   r  rr  s     rV   rt  zExtractedObjects.__repr__  s)    xx/1A4<PPPrU   rm   T.Sequence['FileOrString']generated_sourcesT.Sequence['GeneratedTypes']T.List['FileOrString']c                    t          |           } |D ].}|                                D ]}|                     |           /d | D             S )Nc                0    g | ]}t          |          |S rT   )r&   )r[   ss     rV   r   z0ExtractedObjects.get_sources.<locals>.<listcomp>  s#    333aill3333rU   )r$  get_outputsr   )rm   r  gensrcr  s       rV   r   zExtractedObjects.get_sources  sk     w--' 	" 	"F'')) " " q!!!!	" 4373333rU   T.List[FileOrString]*T.Dict['Compiler', T.List['FileOrString']]c                    |                      ||          }t          | j        j                                        |          S r   )r   r   r  	compilersvalues)r   rm   r  sources_s       rV   classify_all_sourcesz%ExtractedObjects.classify_all_sources  s9    ##G->??%dk&;&B&B&D&DhOOOrU   c                8   |                      | j        j        | j        j                  }|                      | j        | j                  }|                                D ]:\  }}t          |          t          ||                   k    rt          d          ;d S )Nz}Single object files cannot be extracted in Unity builds. You can only extract all the object files for each compiler at once.)	r  r  rm   	generatedr  r  r  r   r   )r   cmpsrcsextracted_cmpsrcscompsrcss        rV   r  z'ExtractedObjects.check_unity_compatible  s     ++DK,?AVWW 55dlDLQQ+1133 	T 	TJD$4yyC....$ &S T T T /	T 	TrU   Nr   r   r  )rm   r  r  r  r   r  )rm   r  r  r  r   r  )rP   rQ   rR   rf  rS   r   r$  r  r  r  r  r  r  rt  staticmethodr   r  r  rT   rU   rV   rE   rE     s)          !E$777G7777(-d(C(C(CGCCCC@EVZ@[@[@[G[[[[IC* * * *Q Q Q Q 4 4 4 \4P P P PT T T T T TrU   )r   orderc                  `    e Zd ZU dZ ed           Zded<   ddZdd
ZddZ	ddZ
ddZdS )StructuredSourcesa  A container for sources in languages that use filesystem hierarchy.

    Languages like Rust and Cython rely on the layout of files in the filesystem
    as part of the compiler implementation. This structure allows us to
    represent the required filesystem layout.
    c                 *    t          t                    S r   )r   r$  rT   rU   rV   <lambda>zStructuredSources.<lambda>  s    D 1 1 rU   rl  zYT.DefaultDict[str, T.List[T.Union[File, CustomTarget, CustomTargetIndex, GeneratedList]]]rm   r(  r   c                    | j                                         }|j                                         D ] \  }}||                             |           !t	          |          S r   )rm   r&  r  extendr  )r   r(  rm   r)  r*  s        rV   __add__zStructuredSources.__add__  s_    ,##%%M'')) 	! 	!DAqAJa     )))rU   rI   c                *    t          | j                  S r   )rI   rm   r   s    rV   __bool__zStructuredSources.__bool__  s    DL!!!rU   =T.Union[File, CustomTarget, CustomTargetIndex, GeneratedList]c                (    | j         d         d         S )zXGet the first source in the root

        :return: The first source in the root
        r   r   r   r   s    rV   
first_filezStructuredSources.first_file  s    
 |B""rU   ET.List[T.Union[File, CustomTarget, CustomTargetIndex, GeneratedList]]c                    t          t          j                            | j                                                            S r   )r$  	itertoolschainfrom_iterablerm   r  r   s    rV   as_listzStructuredSources.as_list  s.    IO11$,2E2E2G2GHHIIIrU   c                    | j                                         D ]+}|D ]&}t          |t                    r|j        r  dS #  dS ,dS )a	  Do we need to create a structure in the build directory.

        This allows us to avoid making copies if the structures exists in the
        source dir. Which could happen in situations where a generated source
        only exists in some configurations
        TF)rm   r  r  r   is_built)r   filesfs      rV   
needs_copyzStructuredSources.needs_copy  sq     \((** 	  	 E    a&&  z $#ttt$  444  urU   N)r(  r  r   r  r   rI   )r   r  )r   r  )rP   rQ   rR   rf  r   rm   rS   r  r  r  r  r  rT   rU   rV   r  r    s           join11j3 j3 j3G 3 3 3 3* * * *" " " "# # # #J J J J     rU   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Zded<   dZded<    ee          Zded<   dZ	ded<   e
j        dAd            Ze
j        dAd            ZdBdZdCdZdCdZdCd ZdCd!ZdDd#ZdEd%ZdFd'ZdAd(ZdAd)ZdAd*ZedGd,            ZedHd.            ZdAd/ZdId2ZdJd5ZdKd7Z dLd;Z!edMd<            Z"dNd=Z#dOd?Z$dNd@Z%dS )PTargetr   r   r   z'SubProject'r   rI   r|   r   r/  r   r0   Frk   build_always_stalerl  r   rr   Nz+InitVar[T.Optional[T.Dict[OptionKey, str]]]r}   r   c                    d S r   rT   r   s    rV   typenamezTarget.typename      rU   c                    d S r   rT   r   s    rV   type_suffixzTarget.type_suffix  r  rU   	overrides"T.Optional[T.Dict[OptionKey, str]]r   c                :    |r! fd|                                 D             }ni }t          j         j        j        j         j        |           _        t           j                  r1t          j	        t          j        d j         d                     d S d S )Nc                `    i | ]*\  }}|j         r|                    j                   n||+S )machine)r\   evolver/  )r[   r)  r*  r   s      rV   
<dictcomp>z(Target.__post_init__.<locals>.<dictcomp>   sL     2 2 2q! :;F188D$48555Q 2 2 2rU   z                Target "z" has a path separator in its name.
                This is not supported, it can cause unexpected failures and will become
                a hard error in the future.)r  r   OptionsViewr0   optionsr   r   r   r   warningtextwrapdedent)r   r  ovrs   `  rV   r  zTarget.__post_init__  s     	2 2 2 2(002 2 2CC C+D,<,E,Mt`cdd	"" 	1L */*/ */ */ 0 0 1 1 1 1 1	1 	1rU   r(  objectc                    t          |t                    st          S |                                 |                                k     S r   r  r  NotImplementedget_idr   r(  s     rV   __lt__zTarget.__lt__.  5    %(( 	"!!{{}}u||~~--rU   c                    t          |t                    st          S |                                 |                                k    S r   r  r  s     rV   __le__zTarget.__le__3  5    %(( 	"!!{{}}..rU   c                    t          |t                    st          S |                                 |                                k    S r   r  r  s     rV   __gt__zTarget.__gt__8  r  rU   c                    t          |t                    st          S |                                 |                                k    S r   r  r  s     rV   __ge__zTarget.__ge__=  r  rU   T.Tuple[str, str]c                    t           r   NotImplementedErrorr   s    rV   get_default_install_dirzTarget.get_default_install_dirB      !!rU   $T.List[T.Union[str, Literal[False]]]c                    t           r   r  r   s    rV   r   zTarget.get_custom_install_dirE  r  rU   BT.Tuple[T.List[T.Union[str, Literal[False]]], str, Literal[False]]c                    |                                  \  }}|                                 }|r%|d         |k    r|d         durd}d |D             }n d}|r||d<   n|g}|gt          |          z  }|||fS )Nr   Tc                0    g | ]}t          |d d          S )optnameN)getattr)r[   is     rV   r   z*Target.get_install_dir.<locals>.<listcomp>Q  s$     N N NIt!<!< N N NrU   F)r  r   r   )r   default_install_dirdefault_install_dir_nameoutdirsr   install_dir_namess         rV   get_install_dirzTarget.get_install_dirH  s    8<8T8T8V8V55--// 	Jwqz%888WQZt=S=S "& N Ng N N N!&  00

./!9 :S\\ I)+===rU   c                    | j         S r   r   r   s    rV   get_basenamezTarget.get_basename^  rJ  rU   c                    | j         S r   r   r   s    rV   
get_subdirzTarget.get_subdira  rw  rU   c                    | j         S r   )r  r   s    rV   get_typenamezTarget.get_typenamed  rN  rU   	target_idc                    t          j                    }|                    |                     dd                     |                                d d         S )Nzutf-8replace)encodingerrors   )hashlibsha256updateencode	hexdigest)r  hs     rV   _get_id_hashzTarget._get_id_hashg  sO     N	!!79!EEFFF {{}}RaR  rU   r  c                    |                     dd                               dd          }t          |          rJ ||z   }| r"t                              |           }|dz   |z   S |S )zuConstruct target ID from subdir, name and type suffix.

        This helper function is made public mostly for tests./@\z@@)r  r   r  r  )r   r   r  	name_partmy_idsubdir_parts         rV   construct_id_from_pathzTarget.construct_id_from_pathq  su     LLc**224==	,,,,,K' 	. --f55K%--rU   c                    | j         }t          | dd          r|d| j        z   z  }|                     | j        ||                                           S )Nname_suffix_setFr   )r   r  suffixr  r   r  r   r   s     rV   r  zTarget.get_id  s\    y4*E22 	&C$+%%D**Kt//113 3 	3rU   kwargsT.Dict[str, T.Any]c                   d|v r6|d         | _         t          | j         t                    st          d          | j         s|                    dd          rd| _         |                     |                     |                     d S )Nr|   z)build_by_default must be a boolean value.rk   FT)r|   r  rI   r   rY  set_option_overridesparse_overridesr   r  s     rV   process_kwargs_basezTarget.process_kwargs_base  s    ''$*+=$>D!d3T:: T&'RSSS$ 	)Iu)E)E 	) %)D!!!$"6"6v">">?????rU   option_overridesT.Dict[OptionKey, str]c                    i | j         _        |                                D ]D\  }}|j        r)|| j         j        |                    | j                  <   5|| j         j        |<   Ed S )Nr  )r  r  r  r\   r  r/  )r   r$  r)  r*  s       rV   r   zTarget.set_option_overrides  st    !#$**,, 	. 	.DAqv .MN&qxx8Hx'I'IJJ,-&q))		. 	.rU   coredata.OptionsViewc                    | j         S r   )r  r   s    rV   get_optionszTarget.get_options  r   rU   key'OptionKey'#T.Union[str, int, bool, 'WrapMode']c                L    t          j        d| j        |         j                  S )Nz!T.Union[str, int, bool, WrapMode])Tcastr  value)r   r*  s     rV   
get_optionzTarget.get_option  s!    
 v94<;L;RSSSrU   c                   |                      dg           }t          |t                    rt          j        d|          S i }t          |          }|D ]m}d|vrt          d          |                    dd          \  }}t          j	        |
                                          }|
                                }|||<   n|S )Nr}   r%  =z%Overrides must be of form "key=value"r
   )rY  r  r%  r.  r/  r   r   splitr   from_stringstrip)r  optsresultr  or)  r*  r*  s           rV   r!  zTarget.parse_overrides  s    zz,b11 dD!! 	:62D999)+!$''	 	 	A!||&'NOOO773??DAq'		22C		AF3KKrU   c                    dS NFrT   r   s    rV   is_linkable_targetzTarget.is_linkable_target      urU   r   c                    g S r   rT   r   s    rV   r  zTarget.get_outputs      	rU   c                    dS r;  rT   r   s    rV   should_installzTarget.should_install  r=  rU   r  )r  r  r   r   )r(  r  r   rI   r   r  r   r  )r   r  )r  r   r   r   )r   r   r   r   r  r   r   r   r  r  r   r   )r$  r%  r   r   )r   r'  )r*  r+  r   r,  )r  r  r   r%  r  r  )&rP   rQ   rR   rS   rk   r  r   r$  rr   r}   abcabstractpropertyr  abstractmethodr  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r#  r   r)  r1  r!  r<  r  rA  rT   rU   rV   r  r    s         IIIKKK((((G$$$$$ %d ; ; ;K;;;;DHHHHH    	   1 1 1 1 . . . .
/ / / /
. . . .
/ / / /
" " " "" " " "> > > >,          ! ! ! \!    \$3 3 3 3@ @ @ @. . . .   T T T T    \&           rU   r  )	metaclassc                      e Zd ZU eZded<    edg          Zded<   d fdZddZ	d Z
d Zedd             Zd! Zd" Zd# Zd$ Zdd%Zedd)            Zd* Zdd,Zd- Zd. Zdd2Zddd5Zdd7Z ed89          dd:            Zdd=Z ed89          dd>            Z ed89          dd@            Z ddBZ!ddCZ"ddEZ#dF Z$ddIZ%ddJZ&ddLZ'ddMZ(ddOZ) ed89          ddQ            Z*dddTZ+dU Z,dV Z-ddXZ.ddZZ/dd[Z0dd\Z1dd]Z2dd_Z3d` Z4ddbZ5ddcZ6ddfZ7dddiZ8 ed89          ddj            Z9ddkZ:dddnZ;ddpZ<ddrZ=dddvZ>ddxZ?ddyZ@dz ZAdd|ZBdd~ZCddZDddZEddZFddZGd ZHddZI xZJS )rD   r  rs   )cppcudazT.FrozenSet[T.Tuple[str, str]]_MASK_LANGSr   r   r   r   r7   r/  r   rm   T.List['SourceOutputs']structured_sourcesT.Optional[StructuredSources]rl   T.List[ObjectTypes]r0   r   r  T.Dict[str, 'Compiler']r  r  c                R   t                                          |||d|||
                    dd                     |	| _        t	                      | _        g | _        || _        g | _        g | _	        |
                    d          | _
        g | _        g | _        g | _        g | _        t                      | _        d| _        d| _        d| _        d | _        | j        g| _        i | _        |
                    dt/          t0                              | _        g | _        g | _        g | _        |
                    dg           |
                    d	g           |
                    d
g           |
                    dd          d| _        d| _        d| _        t                      | _         | !                    |           | "                    |           | #                    |
           | $                                | _%        tM          |
d          | j        z   }tM          |
d          | j        z   }| j        '                                 | j        '                                 | (                    |           | )                    |           tU          | j        | j        | j        | j        | j        |
+                    dd          g          stY          j-        d| d           | .                    |
           | /                                 | 0                                 d S )NTrk   Frk   rz   no_namelanguage_argsr^   r`   ra   r_   )rK   rM   rN   rJ   ro   rp   _allow_no_sourceszBuild target z has no sources. This was never supposed to be allowed but did because of a bug, support will be removed in a future release of Meson)1superr  rY  all_compilersr   r  rl   rN  external_depsinclude_dirsrz   link_targetslink_whole_targetsdepend_filesrx   r   
added_depsname_prefix_setr  filenamedebug_filenameoutputsr  r   r$  
extra_argsrm   r  rr   
d_featuresr   r   rpath_dirs_to_removeprocess_sourcelistprocess_objectlistprocess_kwargsprocess_compilersmissing_languagesr   clearlinkrp   anypopr   r  check_unknown_kwargsvalidate_installcheck_module_linking)r   r   r   r   r/  rm   rN  rl   r0   r  r  r[  r\  rq  s                rV   r  zBuildTarget.__init__  s    	vz4k[a[e[efoqv[w[wxxx&5@]],."4>@35#ZZ88.0ce*,%%$$!" -/;A::oWbcgWhWh;i;i%'35)+ZZ	2..!::or::

#6;;

<77	&
 &
 25%%!((( 	(((F###!%!7!7!9!9 'v{;;d>OO,V\BBTE\\!!!%%'''		,*+++DL$.$,@WY]YpJJ2E::< = = 	QL P P P P Q Q Q 	!!&)))!!#####rU   r   r   c                &   |                                   | j        r*t          | j        | j        g          rt          d          | j        rd| j        vrt          d          |                                 rd| _        d| j        v r| 	                                rr| xj
        | j        | j        gz  c_
        | xj        ddgz  c_        | j        r?| j
                            | j                   | j                            d           dS dS dS dS )zV Initialisations and checks requiring the final list of compilers to be known
        z6cannot mix structured sources and unstructured sourcesrustz5structured sources are only supported in Rust targetsTvaladevelN)validate_sourcesrN  rm  rm   r  r   r  	uses_rustr   r<  rb  rd   rc   rt   rb   r   r   s    rV   	post_initzBuildTarget.post_init"  s4    	" 	[sDL$.+I'J'J 	[ !YZZZ" 	ZvT^'C'C !XYYY>> 	 DHT^##(?(?(A(A#LLT-t~>>LL' 22} 1##DM222 ''00000 $###1 1rU   c                v    d}|                     | j        j        |                                 | j                  S N<{0} {1}: {2}>)rp  rq  rP   r  r`  r   repr_strs     rV   rt  zBuildTarget.__repr__5  s,    #t~6t}UUUrU   c                    | j          S r   r  r   s    rV   __str__zBuildTarget.__str__9  s    )~rU   rI   c                t    |                      t          d                    }|dk    p|dk    o
| j        dk    S )Nunityonr  r   )r1  r   r   )r   	unity_opts     rV   r  zBuildTarget.is_unity<  s=    OOIg$6$677	D ZY-%?%YDOWYDYZrU   c                    | j         t          j        u rE| j        r@| j                                        rt          d          t          j        d           d S d S d S )NzATried to install a target for the build machine in a cross build.zOInstalling target build for the build machine. This will fail in a cross build.)	r/  r   BUILDrk   r0   r  r   r   r  r   s    rV   rp  zBuildTarget.validate_installA  sf    }222t|2..00 p&'jkkknooooo	 3222rU   c                <    |                      || j                   d S r   )check_unknown_kwargs_intknown_kwargsr"  s     rV   ro  z BuildTarget.check_unknown_kwargsH  s#     	%%fd.?@@@@@rU   c                    g }|D ]"}|dk    r	||vr|                     |           #t          |          dk    rBt          j        d                    | j        d                    |                               d S d S )NrU  r   z-Unknown keyword argument(s) in target {}: {}., )r   r   r   r  rp  r   r   )r   r  r  unknownsr)  s        rV   r  z$BuildTarget.check_unknown_kwargs_intM  s     	# 	#AO##$$"""x==1LHOOPTPY[_[d[dem[n[nooppppp rU   c                   t          |t                    sJ g }|D ]}t          |t          t          t          f          rT| j                            |           t          |t                    s$t          |          s|                    |           yt          |t          t          t          f          rTd |                                D             }|rt          d|d          d          | j                            |           t          dt          |          j        d| j        d          |r't#          j        d|d          dd	| j                   d S d S )
Nc                0    g | ]}t          |          |S rT   )r%   )r[   r9  s     rV   r   z2BuildTarget.process_objectlist.<locals>.<listcomp>`  s#    NNNQ1NqNNNrU   zGenerated file r   z) in the 'objects' kwarg is not an object.zBad object of type  in target r   zSource file z1.3.0)r  r$  r   r   rE   rl   r   r%   r?   r@   rA   r  r   r  typerP   r   r-   
single_user   )r   rl   deprecated_non_objectsr  non_objectss        rV   rg  zBuildTarget.process_objectlistW  s   '4(((((!# 	l 	lA!c4)9:;; 
l##A&&&!!%566 5y|| 5*11!444A.?OPP lNN!--//NNN z*+x[^+x+x+xyyy%%a((((&'jT!WW=M'j'j\`\e'j'j'jkkk! 	C()~8Nq8Q)~)~)~)0$/C C C C C	C 	CrU   c                6   t                      }|D ]}t          |t                    r4||vr/| j                            |           |                    |           Kt          |t          t          t          f          r| j	                            |           dS )a  Split sources into generated and static sources.

        Sources can be:
        1. Preexisting source files in the source tree (static)
        2. Preexisting sources generated by configure_file in the build tree.
           (static as they are only regenerated if meson itself is regenerated)
        3. Sources files generated by another target or a Generator (generated)
        N)
r   r  r   rm   r   addr?   r@   rA   r  )r   rm   added_sourcesr  s       rV   rf  zBuildTarget.process_sourcelistj  s     &)UU 	) 	)A!T"" )M))L''***!%%a(((A.?OPP )%%a(((	) 	)rU   r-  rV  r  c                |    d}|d d          D ].}|                      |          r|                    |           d}/|S )NFT)can_compileremove)r-  rm   removedr  s       rV   can_compile_remove_sourcesz&BuildTarget.can_compile_remove_sources|  sQ     	 	A##A&& q!!!rU   c                l   | j         D ]}| j        |         | j        |<   | j        r| j        gnt          }| j        s| j        rut          j        | j        | j                  D ]U}t          |t          t          f          r|j                                        D ]\  }}||v r|| j        vr
|| j        |<   V| j        s%|D ]"}|| j        v r| j        |         | j        |<    n#t          t          | j                                        d                     | _        |                                  dS )a$  Processes additional compilers after kwargs have been evaluated.

        This can add extra compilers that might be required by keyword
        arguments, such as link_with or dependencies. It will also try to guess
        which compiler to use if one hasn't been selected already.
        c                ,    t          | d                   S Nr   )r(   )r  s    rV   r  z4BuildTarget.process_compilers_late.<locals>.<lambda>  s    *QqT:J:J rU   )r*  N)rj  rX  r  rz   r'   r[  r\  r  r  r  r?   r@   r  r   sortedrx  )r   r\   
link_langsr  r   r-  s         rV   process_compilers_latez"BuildTarget.process_compilers_late  s    * 	< 	<D#'#5d#;DN4   .2-?Pd())[
  	8 7 	8_T%68OPP 8 8a,0A!BCC &'k&7&7&9&9 8 8ND(z))d$..H.H/7t,8 ~ 	 #  4---+/+=d+CDN4(E . %VDN,@,@,B,B0J0J&L &L &L M MrU   r   c                *   g }t          | j        | j        | j        | j        g          s|S t          | j                  }| j                                        }| j        rm| j        j                                        D ]N}|D ]I}t          |t          t          f          r|                    |           4|                    |           JO|D ]=}|                                D ]&}t          |          s|                    |           '>| j        D ]=}|j        D ]3}t          |t          t          f          r|                    |           4>| j        D ]a}	t          |	t                    s|	                    |	j        g           }
|
D ]+}|j        dk    r|j        | j        vr|| j        |j        <   ,b|r|D ]}| j                                        D ]/\  }}|                    |          r|| j        vr
|| j        |<    nq0t/          |          rat1          j        t          |                                                    }d| j                                         d|}t;          |          d| j        v rd| j        vr| j        d         | j        d<   d| j        v rht=          d| j        d          }|                     |          }	 | j        |         | j        |<   n%# t@          $ r |                    |           Y nw xY w|S )aq  
        Populate self.compilers, which is the list of compilers that this
        target will use for compiling all its sources.
        We also add compilers that were used by extracted objects to simplify
        dynamic linker determination.
        Returns a list of missing languages that we can add implicitly, such as
        C/C++ compiler for cython.
        rt  zNo z machine compiler for ccythonlanguage)r  r\   )!rm  rm   r  rl   rN  r$  r&  r  r  r   r   r   r  r%   rY  rE   r  r  r  r  rX  r  r  r*   pathlibPathas_posixr/  get_lower_case_namer   r   r1  KeyError)r   rj  rm   r  r*  srcr  r  r\  r9  compsrcsr  r\   r-  r   mr*  r0  s                     rV   ri  zBuildTarget.process_compilers  s    *,DL$.$,@WXYY 	%$$*.t|*<*<N''))	" 	.,4;;== . . . .C!#T{33 .s++++!((----	.   	& 	&F'')) & &
 !|| &NN1%%%& # 	& 	&AY & &a#t-- &NN1%%%&
  	9 	9Aa!122 --ai<<H  9 9 =F**=6648DN4=19  	0  
0 
0&*&8&>&>&@&@ 	0 	0ND(++A.. t~553;DN40
 'q)) 0&|CFF33<<>>h$"2"F"F"H"Hhh`dhh,Q/// T^##4>(A(A"&"4S"9DN3t~%%J0@xPPPCOOC((E0(,(:5(Au%% 0 0 0!((/////0 ! s   K. .LLc                     t           j                  dk    rYt           fddD                       r@d                     j                                                  }t          d|           d S d S )Nr
   c              3  *   K   | ]}|j         v V  d S r   r  )r[   r\   r   s     rV   	<genexpr>z/BuildTarget.validate_sources.<locals>.<genexpr>  s*      *]*]d44>+A*]*]*]*]*]*]rU   )csjavar  z*Cannot mix those languages into a target: )r   r  rm  r   keysr   )r   langss   ` rV   rv  zBuildTarget.validate_sources  s    t~""s*]*]*]*]n*]*]*]']']"IIdn113344E"#WPU#W#WXXX #"""rU   c                   t          |          }|D ]}t          |t                    r| j                            |           2t          |t
                    r>| j                            t          j        | j        j        | j	        |                     t          |d          r| j                            |           t          d          dS )a}  Process the link_depends keyword argument.

        This is designed to handle strings, Files, and the output of Custom
        Targets. Notably it doesn't handle generator() returned objects, since
        adding them as a link depends would inherently cause them to be
        generated twice, since the output needs to be passed to the ld_args and
        link_depends.
        r  zTLink_depends arguments must be strings, Files, or a Custom Target, or lists thereof.N)r   r  r   rx   r   r   from_source_filer0   
source_dirr   hasattrr   )r   rm   r  s      rV   process_link_dependsz BuildTarget.process_link_depends  s     '"" 	= 	=A!T"" 
=!((++++As## =!(()$*:*Et{TUVVX X X XM** =!((++++&<= = =	= 	=rU   r  1T.List[T.Union['FileOrString', 'GeneratedTypes']]rE   c                .   t          | j                  }t          | j                  }g }g }|D ]U}t          |t          t
          f          rtt          |t                    rt          d| j        |          }nt          j        dd| j	                   ||vrt          d| d          |                    |           t          |t          t          t          f          r}t          j        dd| j	                   t          |t                    r|j        n|}||vr)||vr%t          d|                                 d          |                    |           2t          dt#          |          j         d	          t'          | ||          S )
NFz!File argument for extract_objects0.50.0z Tried to extract unknown source r   z%Generated sources for extract_objectsz0.61.0zCObject extraction arguments must be strings, Files or targets (got z).)r   rm   r  r  r   r   r   r,   r  r   r   r   r?   r@   rA   r  r  r  rP   rE   )r   r  sources_setgenerated_setobj_srcobj_genr  r  s           rV   extract_objectszBuildTarget.extract_objects  s   $,''DN++"$,. 	C 	CC#T{++ Cc3'' judk377CC)*MxY]Yhiiik))()RC)R)R)RSSSs####C,0A=!QRR C%&MxY]Yhiii'1#7H'I'IRsm++m0K0K()dFL_L_LaLa)d)d)deees####$  &Bkopsktktk}  &B  &B  &B  C  C  Cgw777rU   Tr  c                J    t          | | j        | j        | j        |d          S )NT)r  )rE   rm   r  rl   )r   r  s     rV   extract_all_objectszBuildTarget.extract_all_objects7  s,    dlDNDL )t5 5 5 	5rU   'ImmutableListProtocol[BuildTargetTypes]c                *    |                                  S r   get_transitive_link_depsr   s    rV   get_all_link_depszBuildTarget.get_all_link_deps;  s    ,,...rU   Nr   c                L    g }| j         D ]}||                                z  }|S r   )r[  r  r   r8  r  s      rV   r  z$BuildTarget.get_transitive_link_deps>  s6    !#" 	, 	,Aa))+++FFrU   r   T.Mapping[str, str]c                ,    |                      |          S r   ) get_transitive_link_deps_mappingr   r   s     rV   get_link_deps_mappingz!BuildTarget.get_link_deps_mappingE  s    44V<<<rU   c                    i }| j         D ]B}|                    |          }|                                }|                    |           |}C|S r   )r[  r  r&  r  )r   r   r8  r  mapping
result_tmps         rV   r  z,BuildTarget.get_transitive_link_deps_mappingH  sY    #%" 	  	 A--f55G Jf%%%FFrU   T.AbstractSet[str]c                    t                      }| j        D ]e}t          |t                    s'|                    |                                           |                    |                                           f|S r   )r   r[  r  rC   r  r  r  get_link_dep_subdirsr  s      rV   r  z BuildTarget.get_link_dep_subdirsS  so    ",,," 	4 	4Aa// +

1<<>>***MM!00223333rU   r  c                8    | j                                         dfS )Nz{libdir})r0   
get_libdirr   s    rV   r  z#BuildTarget.get_default_install_dir\      **,,j88rU   c                    | j         S r   rs   r   s    rV   r   z"BuildTarget.get_custom_install_dir_      rU   T.Optional['FileMode']c                    | j         S r   rw   r   s    rV   r   z#BuildTarget.get_custom_install_modeb  rU  rU   c                0   |                      |           || _        |                     dt          |d                     |                     dt          |d                     t	          | t
                    r|                    dd          ra|                    d| j        dz             | _        |                    d	| j        d
z             | _	        |                    dd           | _
        t          |d          | _        | j        D ]&}t	          |t                    st          d          '| j        D ]A}d|v s|                    d          r&t          j        t#          j        d                     B|                     |                    dg                      t          |d          }|                     |           t          |d          }|                     |           t-          |                    dg           t          t.          f          | _        |                    dd           | _        t5          |                    dd g                    | _        t	          | t
                    sH|                    d          t          d          |                    d          t          d          t          |d          }|D ]}t	          |t8                    sJ || j        v r#t<          j                             | j!        "                                |j#        |j$                  }t<          j        %                    |          st          d| d          | j        &                    |           |                    dd          | _'        t	          | j'        t                    st          d           |                    d!d          | _(        t	          | j(        t                    st          d"          t          |d#          }|D ]}	t	          |	t                    st          d$          t<          j                             | j!        "                                | j#        |	          }t<          j        %                    |          st          d%|	 d          || _)        |                    d&          a|d&         }
t	          |
tT                    r|
rt          d'          n2t	          |
t                    st          d(          |
| _+        d)| _,        |                    d*          v|d*         }t	          |tT                    r|rt          d+          nGt	          |t                    st          d,          |dk    rt          d-          || _-        d)| _.        t	          | t^                    rc| j!        j0        | j1                 }|2                                s|3                                rd)| _4        n| 5                    |d.d/          | _4        t	          | t
                    st	          | t^                    rT| j4        sM| j!        j0        | j1                 6                                rd)| _7        n| 5                    |d0d1          | _7        |                    d2d)          | _8        t	          | j8        t.                    st          d3          |                    d4d          | _9        t	          | j9        t                    st          d5          | j9        dk    rHg d6}| j9        |vr;t          d7:                    | j9        d8                     |                              |                    d9i           }t	          |tv                    st          d:| d;          ty          d< |=                                D                       rt          d:| d=          || _>        d S )>Nr  rW   rJ  rX   r   Frd   z.hrc   z.vapirb   rn   z$Link_args arguments must be strings.z
-Wl,-rpathz-rpathz                    Please do not define rpath with a linker argument, use install_rpath
                    or build_rpath properties instead.
                    This will become a hard error in a future Meson release.
                rx   r~   r   rs   rw   rt   rj   z1Argument gui_app can only be used on executables.r{   z7Argument win_subsystem can only be used on executables.rr   z%Tried to add non-existing extra file r   ry   r   zInstall_rpath is not a string.rq   zBuild_rpath is not a string.rg   z"Resource argument is not a string.z#Tried to add non-existing resource ru   z3name_prefix array must be empty to signify default.zname_prefix must be a string.Trv   z3name_suffix array must be empty to signify default.zname_suffix must be a string.zname_suffix should not be an empty string. If you want meson to use the default behaviour for each platform pass `[]` (empty array)r   b_staticpicr   b_pier   z/Implicit_include_directories must be a boolean.r   z'GNU symbol visibility must be a string.)r  internalhidden	protectedinlineshiddenz+GNU symbol visibility arg {} not one of: {}r  rf   zInvalid rust_dependency_map "z": must be a dictionary.c              3  B   K   | ]}t          |t                     V  d S r   )r  r   )r[   r*  s     rV   r  z-BuildTarget.process_kwargs.<locals>.<genexpr>  s/      LL!:a%%%LLLLLLrU   z+": must be a dictionary with string values.)?r#  original_kwargsadd_pchr   r  
ExecutablerY  r   rd   rc   rb   rn   r   r   
startswithr   r  r  r  r  add_include_dirsadd_depsr   rI   rs   rw   r   rt   r   rr   r  r   r   r0   get_source_dirr   fnameisfiler   ry   rq   rg   r$  r   r_  r  r  rC   machinesr/  	is_darwin
is_windowsr   _extract_pic_pie
is_androidr   r   r   rp  r%  rm  r  rf   )r   r  r  r   inclistdeplistrr   trialrg   rs  ru   rv   r  	permittedrf   s                  rV   rh  zBuildTarget.process_kwargse  s     (((%S/&'::;;;UOFI>>???$
++ 	9vzz:JE/R/R 	9%zz-T9IJJD#ZZTY5HIIDN"JJz488DM(== 	O 	OAa%% O&'MNNNO 	 	Aq  ALL$:$: X_ .     
 	!!&**^R"@"@AAA "&*?@@g&&&!&.99g (

="(E(E),d5 5"JJ~t<<(MD6)J)JKK$
++ 	bzz)$$0&'Z[[[zz/**6&'`aaa%fm<< 	' 	'Aa&&&&&D$$$GLL!1!@!@!B!BAHagVVE7>>%(( U&'Sq'S'S'STTT##A&&&&"(**_b"A"A$,c22 	E"#CDDD!::mR88$*C00 	C"#ABBB#FK88	 	S 	SAa%% M&'KLLLGLL!1!@!@!B!BDKQRSSE7>>%(( S&'QQ'Q'Q'QRRRS"::m$$0 /K+t,, , b*+`aaab "+s33 L*+JKKK)'+$::m$$0 /K+t,, , b*+`aaab "+s33 L*+JKKK"$$* ,W X X X *'+$dM** 	O  )$*:;A{{}} O O00NNdJ'' 	IJt],K,K 	ITXT\ 	I()9:EEGG I00HH,2JJ7UW[,\,\)$;TBB 	V"#TUUU%+ZZ0G%L%L"$4c:: 	N"#LMMM%++WWWI)::&'T'['[\`\vx|  yB  yB  CL  yM  yM  (N  (N  O  O  O$jj)>CC-t44 	r"#pCV#p#p#pqqqLL/B/I/I/K/KLLLLL 	E"  $DCV  $D  $D  $D  E  E  E#6   rU   argoptionc                ,   | j         d         | j         d         z   }d|                                z   |v sd|                                z   |v r$t          j        d| d| d| j                   dS t          |          }|                    |          t          j	        d||                   }n2|| j
        j        j        v r| j
        j        j        |         j        }nd	}t          |t                    st!          d
| d| j        d          |S )Nr  rJ  z-fz	Use the 'z' kwarg instead of passing '-fz' manually to TrI   F	Argument z to z must be boolean)rc  lowerupperr   r  r   r   rY  r.  r/  r0   r   r  r0  r  rI   r   )r   r  r  r  	all_flagsr)  vals          rV   r  zBuildTarget._extract_pic_pie  s   OC(4?5+AA	#))++**dSYY[[.@I.M.MLhShhhh[_[dhhiii4f::c??&&--CC$"+333"+3A6<CCC#t$$ 	W"#Us#U#U	#U#U#UVVV
rU   c                    | j         S r   )r`  r   s    rV   get_filenamezBuildTarget.get_filename  rN  rU   r   c                    | j         S z
        The name of debuginfo file that will be created by the compiler

        Returns None if the build won't create any debuginfo file
        ra  r   s    rV   get_debug_filenamezBuildTarget.get_debug_filename       ""rU   c                    | j         S r   rb  r   s    rV   r  zBuildTarget.get_outputs  r   rU   r  c                    | j         |         S r   rc  r   r  s     rV   get_extra_argszBuildTarget.get_extra_args  s    x((rU   OrderedSet[BuildTargetTypes]c                    t                      }t          j        | j        | j                  D ]E}||vr?|                    |           t          |t                    r|                    |           F|S r   )	r   r  r  r[  r\  r  r  rC   get_dependencies_recurser   r8  r  s      rV   get_dependencieszBuildTarget.get_dependencies  sr     0:||!2D4KLL 	7 	7A

1a// 7..v666rU   r8  include_internalsc                T   |o|                                  }| j        D ]i}||v r|j        dk    r|s|                                 s|                    |           t	          |t
                    r|                    ||           j| j        D ]}|                    ||           d S )N
proc-macro)is_internalr[  re   r  r  rC   r  r\  )r   r8  r  r  s       rV   r  z$BuildTarget.get_dependencies_recurse  s    
 .D$2B2B2D2D" 	F 	FAF{{ L00   

1!]++ F**63DEEE( 	B 	BA&&v/@AAAA	B 	BrU   c                    | j         S r   r   r   s    rV   get_source_subdirzBuildTarget.get_source_subdir%  rw  rU   c                    | j         S r   r   r   s    rV   r   zBuildTarget.get_sources(  r   rU   r  c                    | j         S r   )rl   r   s    rV   get_objectszBuildTarget.get_objects+  r   rU   r  c                    | j         S r   )r  r   s    rV   get_generated_sourcesz!BuildTarget.get_generated_sources.  
    ~rU   c                    | j         S r   rS  r   s    rV   rA  zBuildTarget.should_install1  r   rU   c                *    t          | j                  S r   )rI   r  r   s    rV   has_pchzBuildTarget.has_pch4  s    DH~~rU   c                8    | j                             |g           S r   )r  rY  r  s     rV   get_pchzBuildTarget.get_pch7  s    x||Hb)))rU   T.List['IncludeDirs']c                    | j         S r   )rZ  r   s    rV   get_include_dirszBuildTarget.get_include_dirs:  rU  rU   c                >    t          |          }|D ]}| j        v rt          |t          j                  rq                     |j                    j                             fd|j        D                         	                    |j
        |                                            j                            |j                    j                            |j                    j                            |j                   |                                s|                                r^t          j        dg |                                |                                g g g g g i g g g           } j                            |                                |j                   nt          |t          j                  re| j        vrA j                            |                                |                                                                |j                   nt          |t2                    r t5          d|j         d j         d          t9          |d          r|j        }t9          |d          st9          |d          rt5          d	          t5          d
t=          |          j        d          |j         }dD ],}||v r& j         |                             ||                    - j        !                    |           
d S )Nc              3  .   K   | ]}|j         v|V  d S r   )rr   )r[   r  r   s     rV   r  z'BuildTarget.add_deps.<locals>.<genexpr>F  s0      '`'`aatO_F_F_F_F_F_F_'`'`rU   	undefinedzTried to use a build target z as a dependency of target z2.
You probably should put it in link_with instead.held_objectproject_args_frozenglobal_args_frozenzTried to use subproject object as a dependency.
You probably wanted to use a dependency declared in it instead.
Access it by calling get_variable() on the subproject object.z$Argument is of an unacceptable type z.
Must be either an external dependency (returned by find_library() or dependency()) or an internal dependency (returned by declare_dependency()).)rN   rM   )"r   r^  r  r   InternalDependencyrf  rm   rr   r  r  r~   get_include_typerl   r[  	librariesr\  whole_librariesget_compile_argsget_link_argsrY  r   r  ext_deps
Dependencyr   rD   r   r   r  r*  r  rP   rd  r  )r   depsr   extpartdep_d_featuresfeatures   `     rV   r  zBuildTarget.add_deps=  sd   t}} 4	% 4	%Cdo%%#|>?? (A''444 '''`'`'`'`3?'`'`'````%%c&=s?S?S?U?UVVV##CK000!((777'..s/BCCC'')) 7S->->-@-@ 7*=k>@>A>R>R>T>T>A>O>O>Q>Q>@"b"bRTVXZ\^`	b bG
 &--g666cl++++C!899 Ad000&--c222++COO,=,=>>>cl++++C-- A& (Zch (Z (Zkokt (Z (Z (Z [ [ [ 3.. */C3 566 l'#G[:\:\ l* ,k l l l ' (@dSViiN` (@ (@ (@ A A A
 !^N6 M Mn,,OG,33N74KLLLO$$$$i4	% 4	%rU   T.List[dependencies.Dependency]c                    | j         S r   )rY  r   s    rV   get_external_depszBuildTarget.get_external_depsu  s    !!rU   c                    dS r;  rT   r   s    rV   r  zBuildTarget.is_internalx  r=  rU   r   T.List[BuildTargetTypes]c                   |D ]c}t          |t          t          f          sMt          |t          j                  r!t          t          j        d                    t          |d          |	                                st          d|d          t          | t                    r4| j        r-|                                r|                     |gd           t          | t                    rCt          |t                    r.|j        s'd|j        d| j        d	}|d
z  }t          |          |                     |           | j                            |           ed S )Na                          An external library was used in link_with keyword argument, which
                        is reserved for libraries built as part of this project. External
                        libraries must be passed using the dependencies keyword argument
                        instead, because they are conceptually "external dependencies",
                        just like those detected with the dependency() function.
                    z is not a target.zLink target 'z' is not linkable.T)promoted"Can't link non-PIC static library  into shared library . 9Use the 'pic' option to static_library to build with PIC.)r  r  r@   r   ExternalLibraryr   r  r  r   r<  rC   rk   r  rp   rB   r   r   check_can_link_togetherr[  r   )r   r   r  msgs       rV   rl  zBuildTarget.link{  s    	( 	(Aa&*;!<== 	Ba!=>> ( : * *    '!'@'@'@AAA'')) P&'Nq'N'N'NOOO$.. 4< AMMOO  d333$.. ,:a3O3O ,XYX] ,i16iiZ^ZciiiRR&s+++((+++$$Q''''/	( 	(rU   Fr?  c                   |D ]b}t          |t          t          f          rK|                                st	          d|d          |                                rt	          d          njt          |t                    st	          |d          t          | t                    r.|j        s'd|j	        d| j	        d}|dz  }t	          |          | 
                    |           t          | t                    rJ|                     ||           | j        r-|                                D ]}|                     |d	           | j                            |           dd S )
NzCustom target z is not linkable.z<Can only link_whole custom targets that are static archives.z is not a static library.r@  rA  rB  rC  T)r  r?   r@   r<  r   links_dynamicallyrC   rB   r   r   rE  _bundle_static_libraryrk   get_internal_static_librariesr\  r   )r   r   r?  r  rF  libs         rV   rp   zBuildTarget.link_whole  s    	. 	.A!l,=>?? 
,++-- T*+RA+R+R+RSSS&&(( k*+ijjjk=11 ,&!'H'H'HIIID-00 , ,i16iiZ^ZciiiRR&s+++((+++$.. ? ++Ax888 < ? >>@@ ? ?33C>>>>#**1-----	. 	.rU   c                L    t                      }|                     |           |S r   )r   %get_internal_static_libraries_recurser   r8  s     rV   rJ  z)BuildTarget.get_internal_static_libraries  s$    /9||226:::rU   c                   | j         D ]D}|                                r.||vr*|                    |           |                    |           E| j        D ]+}|                                r|                    |           ,d S r   )r[  r  r  rM  r\  r  s      rV   rM  z1BuildTarget.get_internal_static_libraries_recurse  s    " 	@ 	@A}} @1F??

177???( 	@ 	@A}} @77???	@ 	@rU   r  T.Union[BuildTargetTypes]c                   |                                  r| j                            |           d S t          |t          t
          f          s|                                 rBd|j        d| j        d}|r|d| j        d|j        d|j        dz  }t          |          | j                            |	                                           d S )Nz*Cannot link_whole a custom or Rust target z into a static library zY. Instead, pass individual object files with the "objects:" keyword argument if possible.z1 Meson had to promote link to link_whole because z is installed but not z', and thus has to include objects from z to be usable.)
rw  r\  r   r  r?   r@   r   r   rl   r  )r   r  r?  r  s       rV   rI  z"BuildTarget._bundle_static_library  s   >> 	9#**1-----L*;<== 	9 	9kaf k k_c_h k k kA Y X$) X Xmnms X X?@vX X X Y"1%%%L 5 5 7 788888rU   BuildTargetTypesc                   t          |t                    o|                                }|                                 s!|rt	          d|j        d| j                  | j        |j        urk|r|j        dk    r`d| j         d|j         d| j        }| j        	                                rt	          |dz             t          j        |dz              d S d S d S )	NzTry to link Rust ABI library z with a non-Rust target r  z$Tried to mix libraries for machines z and r  z' This is not possible in a cross build.z This will fail in cross build.)r  rD   uses_rust_abirw  r   r   r/  re   r0   r  r   r  )r   r  links_with_rust_abirF  s       rV   rE  z#BuildTarget.check_can_link_together  s   (K88NQ__=N=N~~ 	t$7 	t"#r16#r#reien#r#rsss1=00:M0QRQbfrQrQrw9IwwPQP]wwjnjswwC..00 F&s-V'VWWWS#DDEEEEE 10QrQrrU   pchlistc                P   |sd S t          |          dk    r0t          |d                   st          d|d          d          nKt          |          dk    rt          |d                   r%t          |d                   st          d          nct          |d                   r5t          |d                   st          d          |d         |d         g}nt          d|d          d          t          j                            |d                   t          j                            |d                   k    rt          d          t          j        d	d
| j	        d           n"t          |          dk    rt          d          |D ]}t          |t                    st          d          t          j                            t          j                            | j        j        | j        |                    st          d| d          || j        |<   d S )Nr
   r   zPCH argument z is not a header.   z>PCH definition must contain one header and at most one source.z is of unknown type.z,PCH files must be stored in the same folder.zPCH source filesr  z)Only a single header file should be used.z-PCH definition may have a maximum of 2 files.zPCH arguments must be strings.zFile z does not exist.)r   r$   r   r&   r  r   dirnamer-   r  r   r  r   r   r  r   r0   r  r   r  )r   r  rV  r  s       rV   r  zBuildTarget.add_pch  s4    	TF\\QWQZ(( V&'Twqz'T'T'TUUUV\\Q$$ Y ,, m*+klllm71:&& Y ,, m*+klll"1:wqz2&'Wwqz'W'W'WXXXwwqz**bgoogaj.I.III&'UVVV();Xt)TV V V V\\A"#RSSS 	B 	BAa%% G$%EFFF7>>"',,t/?/JDKYZ"["[\\ B$%@Q%@%@%@AAAB$rU   r`  T.Sequence['IncludeDirs']set_is_systemc                    g }|D ];}t          |t                    st          d          |                    |           <|d}|dk    r|dk    fd|D             }| xj        |z  c_        d S )NzAInclude directory to be added is not an include directory object.preservesystemc           	         g | ]J}t          |                                |                                |                                          KS rT   )rh  rv  ry  r{  )r[   xrk  s     rV   r   z0BuildTarget.add_include_dirs.<locals>.<listcomp>  sD    rrrij;q||~~q}}	1KaKaKcKcddrrrrU   )r  rh  r   r   rZ  )r   r`  r[  idsark  s        @rV   r  zBuildTarget.add_include_dirs  s    %' 	 	Aa-- l&'jkkkJJqMMMM &MJ&&%1IrrrrnqrrrCS rU   T.List[T.Tuple[str, str, str]]c                    g S r   rT   r   s    rV   get_aliaseszBuildTarget.get_aliases
  r?  rU   c                8   g }| j         D ]-}|j        
|j        |vr|                    |j                   .t          j        | j        | j                  D ]B}t          |t          t          f          r|j
        D ]}||vr|                    |           C|S )ar  
        Sometimes you want to link to a C++ library that exports C API, which
        means the linker must link in the C++ stdlib, and we must use a C++
        compiler for linking. The same is also applicable for objc/objc++, etc,
        so we can keep using clink_langs for the priority order.

        See: https://github.com/mesonbuild/meson/issues/1653
        )rY  r  r   r  r  r[  r\  r  r?   r@   r  )r   r  r   link_targetr  s        rV   get_langs_used_by_depsz"BuildTarget.get_langs_used_by_deps  s       % 	+ 	+C|#|5((S\*** %?4+<d>UVV 	+ 	+K+6G'HII '1 + +5((LL***+ rU   c           	        | j         r| j        | j                  }|S t          D ]G}|| j        v r<	 | j        |         }n)# t          $ r t          d| j        d| d          w xY w|c S Ht          d| j        d          )Nz2Could not get a prelinker linker for build target z$. Requires a compiler for language "&", but that is not a project language.z"Could not determine prelinker for r   )rz   rX  r'   r  r  r   r   )r   r  r   	prelinkers       rV   get_prelinkerzBuildTarget.get_prelinker)  s     	%d&89DK 		! 		!ADN""/ $ 21 5II / / /(.TY . .=>. . ./ / //
 !    # P$)PPPQQQs	   =&A# T.Tuple['Compiler', T.List[str]]c           	     X   | j         r.| j        | j                  }||                    | j                  fS | j        j        j        | j                 }|                                 }t          D ]b}|| j        v s||v rS	 ||         }n)# t          $ r t          d| j        d| d          w xY w|                     |j                  }||fc S ct          D ]=}	 | j        |         }||                    | j                  fc S # t          $ r Y :w xY wt          d| j                  )a  
        We use the order of languages in `clink_langs` to determine which
        linker to use in case the target has sources compiled with multiple
        compilers. All languages other than those in this list have their own
        linker.
        Note that Vala outputs C code, so Vala sources can use any linker
        that can link compiled C. We don't actually need to add an exception
        for Vala here because of that.
        z0Could not get a dynamic linker for build target z". Requires a linker for language "rj  )rz   rX  language_stdlib_only_link_flagsr0   r   r  r/  rh  r'   r  r   r   get_used_stdlib_argsr  AssertionError)r   r  rX  	dep_langsr   linkerstdlib_argss          rV   $get_clink_dynamic_linker_and_stdlibsz0BuildTarget.get_clink_dynamic_linker_and_stdlibs9  s     	P%d&89D==d>NOOOO
 (1;D<LM //11	  	+ 	+ADN""a9nn/*1-FF / / /(.49 . .;<. . ./ / //
 ,0+D+DV_+U+U {**** '5  	 	A)!,TAA$BRSSSSSS    ]PTPY]]^^^s   =B&B,(D
DDrz   c                F   | j         j        j        | j                 }t	          | j                                      |                                           }g }|D ]F}||k    r>||f| j        vr3|                    ||         	                    | j                              G|S r   )
r0   r   r  r/  r   unionrh  rL  r  ro  )r   rz   rX  	all_langsrt  dls         rV   rp  z BuildTarget.get_used_stdlib_argsj  s    (1;D<LM''--d.I.I.K.KLL	#% 	h 	hB]""M':$BR'R'R ""=#4#T#TUYUe#f#fgggrU   c                    d| j         v S )Nrs  r  r   s    rV   rw  zBuildTarget.uses_rustv  s    ''rU   c                <    |                                  o| j        dv S )N>   rlibdylibr  )rw  re   r   s    rV   rT  zBuildTarget.uses_rust_abiy  s     ~~[D$8<[$[[rU   c                    d| j         v S )Nfortranr  r   s    rV   uses_fortranzBuildTarget.uses_fortran|  s    DN**rU   c                    |                                  r| j        d         }n|                                 \  }}|o|                                dv S )a&  
        Check if the dynamic linker is MSVC. Used by Executable, StaticLibrary,
        and SharedLibrary for deciding when to use MSVC-specific file naming
        and debug filenames.

        If at least some code is built with MSVC and the final library is
        linked with MSVC, we can be sure that some debug info will be
        generated. We only check the dynamic linker here because the static
        linker is guaranteed to be of the same type.

        Interesting cases:
        1. The Vala compiler outputs C code to be compiled by whatever
           C compiler we're using, so all objects will still be created by the
           MSVC compiler.
        2. If the target contains only objects, process_compilers guesses and
           picks the first compiler that smells right.
        rs  >   lld-linkrl  xilinkoptlink)rw  rX  ru  get_linker_id)r   r-  _s      rV   get_using_msvczBuildTarget.get_using_msvc  sX    & >> 	F)&1HHCCEEKHaaH22448aaarU   c                   | j         D ]}t          |t                    r|j        s| j        j        | j                                                 r t          d| j	         d|j	         d          | j        j        | j                 
                                rt          | t                    rd|_        t          j        d| j	         d|j	         d|j	         d|j	         d	           d|_        dS )	zR
        Warn if shared modules are linked with target: (link_with) #2865
        ztarget z links against shared module z. This is not permitted on OSXTzk, which is incorrect.
             This will be an error in the future, so please use shared_library() for z7 instead.
             If shared_module() was used for z because it has references to undefined symbols,
             use shared_library() with `override_options: ['b_lundef=false']` instead.N)r[  r  SharedModuleforce_sonamer0   r  r/  r  r   r   r  r   deprecation)r   rg  s     rV   rq  z BuildTarget.check_module_linking  sN     , 	4 	4K+|44 4[=U 4#,T-=>HHJJ 4(z$)zz+JZzzz| | |%.t/?@KKMM 4R\]acoRpRp 4 04K,,$ &sty &s &sWbWg &s &sp{  qA&s &s ITHX	&s &s &s t t t 04K,%	4 	4rU   c                n   |                     d          d S |d         }t          |t                    rdt          j                            |          rt          j        |          | _        nt          j	        | j
        j        | j        |          | _        nt          |t                    r|| _        njt          |t          t          f          r?t          j        |                                |                                          | _        nt%          d          |                     |           d S )Nr   z`vs_module_defs must be either a string, a file object, a Custom Target, or a Custom Target Index)rY  r  r   r  r   isabsr   from_absolute_filer   r  r0   r  r   r?   r@   from_built_filer  r  r   r  )r   r  r   s      rV   process_vs_module_defs_kwz%BuildTarget.process_vs_module_defs_kw  s&   ::&''/FDJK[D\dC   	Lw}}T"" l&*&=d&C&C##&*&;D<L<WY]Ydfj&k&k##d## 		L"&D|->?@@ 	L"&"6t7H7H$J[J[J]J]"^"^D"KL L L 	!!$'''''rU   )r   r   r   r   r   r7   r/  r   rm   rM  rN  rO  rl   rP  r0   r   r  rQ  r  r  r  r  )rm   rM  r   r   )r-  rV  rm   r  r   rI   r  )r  r  r   rE   T)r  rI   r   rE   )r   r  r   r   r   r  r   r  rB  rC  r   r  )r  r  r  r   r  r   r   rI   r  r   )r  r   r   r   r   r  r8  r  r  rI   r   r   )r   r  r   r  )r   r$  )r   r9  )r   r=  r   r   )F)r   r=  r?  rI   r   r   r8  r  r   r   )r  rP  r?  rI   r   r   )r  rR  r   r   )r  r   rV  r   r   r   r   )r`  rZ  r[  r   r   r   r   rc  )r   rm  )rz   r   r   r   rD  )KrP   rQ   rR   known_build_target_kwargsr  rS   	frozensetrL  r  rx  rt  r  propertyr  rp  ro  r  rg  rf  r  r  r  ri  rv  r  r  r  r  r	   r  r  r  r  r  r   r   rh  r  r  r  r  r  r  r  r  r   r  r  rA  r!  r#  r&  r  r;  r  rl  rp   rJ  rM  rI  rE  r  r  re  rh  rl  ru  rp  rw  rT  r  r  rq  r  __classcell__rq  s   @rV   rD   rD     s        ,L5555 3<)= 3 3K    
K$ K$ K$ K$ K$ K$Z1 1 1 1&V V V   [ [ [ X[p p pA A A
q q qC C C&) ) ) )$    \$ $ $LU! U! U! U!nY Y Y
= = =.8 8 8 825 5 5 5 5/ / / / Yt   = = = = Yt    Yt   9 9 9 9       ! ! ! !y7 y7 y7v   &   # # # #   ) ) ) ) Yt   B B B B B$                * * * *! ! ! !6% 6% 6%p" " " "   ( ( ( (4. . . . .2 Yt   
@ @ @ @9 9 9 9 9,	F 	F 	F 	F% % % %>! ! ! ! !      8R R R /_ /_ /_ /_b
 
 
 
( ( ( (\ \ \ \+ + + +b b b b44 4 40( ( ( ( ( ( ( (rU   rD   c                  "    e Zd ZdZddZd	dZdS )
FileInTargetPrivateDirzRepresents a file with the path '/path/to/build/target_private_dir/fname'.
       target_private_dir is the return value of get_target_private_dir which is e.g. 'subdir/target.p'.
    r  r   c                    || _         d S r   r  )r   r  s     rV   r  zFileInTargetPrivateDir.__init__      


rU   r   c                    | j         S r   r  r   s    rV   r  zFileInTargetPrivateDir.__str__  r<  rU   N)r  r   r  )rP   rQ   rR   rf  r  r  rT   rU   rV   r  r    sF                 rU   r  c                  J    e Zd ZdZddZedd            Zdd
ZddZddZ	dS )FileMaybeInTargetPrivateDirz1Union between 'File' and 'FileInTargetPrivateDir'inner%T.Union[File, FileInTargetPrivateDir]c                    || _         d S r   )r  )r   r  s     rV   r  z$FileMaybeInTargetPrivateDir.__init__  r  rU   r   r   c                    | j         j        S r   )r  r  r   s    rV   r  z!FileMaybeInTargetPrivateDir.fname  s    zrU   build_to_srctarget_private_dirc                    t          | j        t                    r*t          j                            || j        j                  S | j                            |          S r   )r  r  r  r  r   r   r  rel_to_builddir)r   r  r  s      rV   r  z+FileMaybeInTargetPrivateDir.rel_to_builddir  sJ    dj"899 	F7<< 2DJ4DEEEz)),777rU   srcdirr}  c                    t          | j        t                    rt          d          | j                            ||          S )NzUnreachable code)r  r  r  RuntimeErrorabsolute_path)r   r  r}  s      rV   r  z)FileMaybeInTargetPrivateDir.absolute_path  s>    dj"899 	31222z''999rU   c                    | j         S r   r  r   s    rV   r  z#FileMaybeInTargetPrivateDir.__str__  r<  rU   N)r  r  r  )r  r   r  r   r   r   )r  r   r}  r   r   r   )
rP   rQ   rR   rf  r  r  r  r  r  r  rT   rU   rV   r  r    s        ;;          X 8 8 8 8
: : : :
     rU   r  c                  r    e Zd Zdddd dd'dZd(dZd)dZd*dZd*dZd*dZe	d+d            Z
	 	 	 d,d-d&ZdS ).	GeneratorNF)depfilecapturedependsr   exe/T.Union['Executable', programs.ExternalProgram]	argumentsr   outputr  r   r  rI   r  8T.Optional[T.List[T.Union[BuildTarget, 'CustomTarget']]]r   r   c               l    || _         || _        || _        |pg | _        || _        || _        || _        d S r   )r  r  r  r  arglistrb  r   )r   r  r  r  r  r  r  r   s           rV   r  zGenerator.__init__  s>     EL]PR 			rU   r   c                P    d}|                     | j        j        | j                  S )Nz
<{0}: {1}>)rp  rq  rP   r  r|  s     rV   rt  zGenerator.__repr__  s"    t~6AAArU   c                    | j         S r   )r  r   s    rV   get_exezGenerator.get_exe  rF  rU   innamec                    t           j                            |          t           j                                      d         fd| j        D             }|S )Nr   c                d    g | ],}|                     d                                d          -S 
@BASENAME@@PLAINNAME@r  r[   r`  basename	plainnames     rV   r   z/Generator.get_base_outnames.<locals>.<listcomp>  s8    kkkYZ<22::=)TTkkkrU   )r  r   r  splitextrb  )r   r  basesr  r  s      @@rV   get_base_outnameszGenerator.get_base_outnames  sX    G$$V,,	7##I..q1kkkkk^b^jkkkrU   c                   | j         t          d          t          j                            |          }t          j                            |          d         }| j                             d|                              d|          S )NzJTried to get dep name for rule that does not have dependency file defined.r   r  r  r  r   r  r   r  r  r  )r   r  r  r  s       rV   get_dep_outnamezGenerator.get_dep_outname  sq    <"#opppG$$V,,	7##I..q1|##L(;;CCMS\]]]rU   c                    t           j                            |          t           j                                      d         fd| j        D             S )Nr   c                d    g | ],}|                     d                                d          -S r  r  r  s     rV   r   z)Generator.get_arglist.<locals>.<listcomp>  s8    jjjXY		,1199-SSjjjrU   )r  r   r  r  r  )r   r  r  r  s     @@rV   get_arglistzGenerator.get_arglist  sT    G$$V,,	7##I..q1jjjjj]a]ijjjjrU   parentr  c                r    t          j        |                              |           }|j        d         dk    S )Nr   z..)r  PurePathrelative_toparts)r  r  relpaths      rV   is_parent_pathzGenerator.is_parent_path  s2    "5))55f==}Q4''rU   r  TT.Iterable[T.Union[str, File, 'CustomTarget', 'CustomTargetIndex', 'GeneratedList']]state%T.Union['Interpreter', 'ModuleState']preserve_path_fromrc  T.Optional[T.List[str]]env T.Optional[EnvironmentVariables]'GeneratedList'c                   t          | j        |||ng ||nt                                }|D ]}t          |t                    r|j                            |           t          |t                    r|j                            |j                   t          |t          t          f          r;|j                            |           fd|	                                D             }nt          |t                     rJ|rt          d          |j                            |           d |	                                D             }n?t          |t                    r't          j        j        j        j        |          g}n|g}|D ]x}	|rO|	                    j        j        j        j                  }
|                     ||
          st          d          t'          |	          }	|                    |	           y|S )N)rc  r  c                D    g | ]}t          j        j        |          S rT   )r   r  r   )r[   r  r  s     rV   r   z+Generator.process_files.<locals>.<listcomp>,  s(    UUUd*5<;;UUUrU   zZgenerator.process: 'preserve_path_from' is not allowed if one input is a 'generated_list'.c                ,    g | ]}t          |          S rT   )r  r[   r  s     rV   r   z+Generator.process_files.<locals>.<listcomp>1  s!    IIIA,Q//IIIrU   zmgenerator.process: When using preserve_path_from, all input files must be in a subdirectory of the given dir.)rA   r   r"   r  r?   r  r  r@   r  r  r   r   r   r  r0   r  r  	build_dirr  r  add_file)r   r  r  r  rc  r  r  efsr  abs_fs     `        rV   process_fileszGenerator.process_files  s:   
 L%/%;zz,@,B,BD D D  	* 	*A!\** &""1%%%!.// -""18,,,!l,=>?? ""1%%%UUUUQ]]__UUUA}-- % I*  ,H  I  I  I""1%%%IIIIIAs## +E,=,H%,XYZZ[S * *% `OOE,=,H%J[JeffE../A5II `.  0_  `  `  `/225))))* rU   )r  r  r  r   r  r   r  r   r  rI   r  r  r   r   r  )r   r  )r  r   r   r   )r  r   r  r   r   rI   )NNN)r  r  r  r  r  r   rc  r  r  r  r   r  )rP   rQ   rR   r  rt  r  r  r  r  r  r  r  rT   rU   rV   r  r    s         -1!&UY(     "B B B B      ^ ^ ^ ^k k k k
 ( ( ( \( =A<@>B	% % % % % % %rU   r  c                      e Zd ZU dZded<   ded<   ded<   ded	<   d
ed<   d!dZd"dZd#dZd$dZd%dZ	d&dZ
d'dZd%dZd(dZd S ))rA   z The output of generator.process.r  	generatorr   r   r   r  r   rc  r  r  r   r   c                `   | j         j        | _        t                      | _        g | _        g | _        i | _        g | _        g | _	        | j
        g | _
        | j        t                      | _        t          | j         j        t          j                  r| j         j                                        st#          d          | j         j                                        }t&          j                            |          r0| j	                            t/          j        |                     d S d S d S )Nz4Tried to use not-found external program as generator)r  r  r   r   r  
infilelistoutfilelistoutmapextra_dependsr]  rc  r  r"   r  r   ExternalProgramfoundr   get_pathr  r   r  r   r   r  )r   r   s     rV   r  zGeneratedList.__post_init__L  s   N&	.1ee?A(*HJ*,?"+-DO8-A-C-CDHdn((*BCC 	H>%++-- _&']^^^>%..00Dw}}T"" H !(()@)F)FGGGGG	H 	HH HrU   infiler  outfilesr  r  c                   g }|                     |j        j        |j        j                  }t          j                            | j                  sJ t          j                            || j                  }t          j        	                    |          }|D ]5}|
                    t          j                            ||                     6|S r   )r  r0   r  r  r  r   r  r  r  rY  r   r   )	r   r  r  r  r8  in_absrelpath_segmentofs	            rV   add_preserved_path_segmentz(GeneratedList.add_preserved_path_segmentd  s     %%e&7&BEDUD_``w}}T455555goofd&=>>ws++ 	: 	:BMM"',,|R889999rU   newfilec                    | j                             |           | j                            |j                  }| j        r|                     |||          }| xj        |z  c_        || j        |<   d S r   )	r  r   r  r  r  r  r   r  r  )r   r  r  r  s       rV   r  zGeneratedList.add_filen  sx    w'''>33GMBB" 	Q66w%PPHH$'GrU   #T.List[FileMaybeInTargetPrivateDir]c                    | j         S r   )r  r   s    rV   
get_inputszGeneratedList.get_inputsv  r?  rU   c                    | j         S r   )r  r   s    rV   r  zGeneratedList.get_outputsy  r  rU   r`  c                    | j         |         S r   )r  )r   r`  s     rV   get_outputs_forzGeneratedList.get_outputs_for|  s    {8$$rU   'Generator'c                    | j         S r   )r  r   s    rV   get_generatorzGeneratedList.get_generator  r  rU   c                    | j         S r   r  r   s    rV   r  zGeneratedList.get_extra_args  r?  rU   c                    | j         S r   r   r   s    rV   r  zGeneratedList.get_subdir  rw  rU   Nr  )r  r  r  r   r  r  r   r   )r  r  r  r  r   r   )r   r  r  )r`  r  r   r   )r   r	  r  )rP   rQ   rR   rf  rS   r  r   r  r  r  r  r  r  r  rT   rU   rV   rA   rA   A  s         +*KKK''''))))H H H H0   ( ( ( (          % % % %           rU   rA   c                       e Zd ZeZdZd% fdZd& fdZ fdZd'dZ	d Z
d Zd(dZd(dZd Zd)d!Zd*d"Zd+d$Z xZS ),r  
executabler   r   r   r   r7   r/  r   rm   rM  rN  rO  rl   rP  r0   r   r  rQ  c                   t          d          }d|
vr(||j        j        v r|j        j        |         j        |
d<   t	                                          |||||||||	|

  
         |
                    d          pd| _        |
                    dd          | _        t          | j        t                    st          d          |
                    d          | _        t          | j        t          t          t          d           f          st          d	          | j        | _        d| _        d | _        |                     |
           d S )
Nr  r   r{   consoler   Fz3"export_dynamic" keyword argument must be a booleanr   z="export_dynamic" keyword argument must be a boolean or string)r   r   r  r0  rW  r  rY  r{   r   r  rI   r   r   r   r  is_linkwithablewas_returned_by_find_programr   r  )r   r   r   r   r/  rm   rN  rl   r0   r  r  r*  rq  s               rV   r  zExecutable.__init__  sE      3+*>*F#F#F'08=CF5Mvz;I[]d$i	9 	9 	9#ZZ88EI$jj)95AA$-t44 	Z"#XYYYjj**$+c4::'>?? 	d"#bccc#2,1)04&&v.....rU   r   r   c                   t                                                       | j        j        | j                 }t          | d          sd| _        t          | d          sz|                                s|                                s	d| j	        v r	d| _
        n@|j                            d          s|j        dk    r	d| _
        nd	| j	        v r2| j	        d	                                                             d
          s;d| j	        v r;| j	        d                                                             d
          r	d| _
        nd	| j	        v r2| j	        d	                                                             d          s;d| j	        v r;| j	        d                                                             d          r	d| _
        nd	| j	        v r:| j	        d	                                                             d          rd| _
        nd	| j	        v r!| j	        d	                                         dv s*d| j	        v r)| j	        d                                         dv rd| _
        nud	| j	        v r!| j	        d	                                         dv s*d| j	        v r)| j	        d                                         dv rd| _
        n|                                | _
        | j        | _        | j
        r| xj        d| j
        z   z  c_        | j        | j        d<   d | _        d | _        | j        r}| j        dz   }t+          | j        t.                    r| j        }|                                s|                                r*|                                 r| d| _        nd| d| _        |                                o\d| j	        v p'|                                 p|                                 o+| j        j                            t9          d                    }|r5| j        }t;          | dd          dk    r|d| j
        z   z  }|dz   | _        d S d S )Nr   r   r  r  r  wasm
emscriptenjsr  armclangrJ  axfccrxabsxc16elf>   tic2000out>   mwccarmmwcceppcnefr   r   z.exe.librK  .arK   r  .pdb)rW  rx  r0   r  r/  r  r   r  	is_cygwinr  r  r^  r  r  get_exe_suffixr   r`  rb  import_filenamera  r   r  r   r   r  rw  r   r1  r   r  )r   r  implib_basenamecreate_debug_filer   rq  s        rV   rx  zExecutable.post_init  sX   "+D,<= tX&& 	DKtX&& 	7!!## 7w'8'8':': 7ddn>T>T#**622 7gn6T6T"''DN3,?,F,F,H,H,S,ST^,_,_'4>))dnU.C.J.J.L.L.W.WXb.c.c)#''DN3,?,F,F,H,H,S,STZ,[,['4>))dnU.C.J.J.L.L.W.WX^._._)#''DN3,?,F,F,H,H,S,STZ,[,['#''DN3,?,F,F,H,HO,[,[4>))dnU.C.J.J.L.LP_._._#''DN3,?,F,F,H,HLc,c,c4>))dnU.C.J.J.L.LPg.g.g#%4466	; 	/MMS4;..MM-Q  $"  	E"i&0O$+s++ ."&+!!## Ew'8'8':': E&&(( E.=+C+C+CD((+D+D+D+DD(    I'T4>>+;+;Tt?R?R?T?TI  )44Yw5G5GHH	 	  	0
 9DtXu--66dk))"&-D	0 	0rU   c                    t                                          |           |                    d          pd| _        | j        dk    rt	          d          d S )Nre   binz7Invalid rust_crate_type: must be "bin" for executables.)rW  rh  rY  re   r   )r   r  rq  s     rV   rh  zExecutable.process_kwargs  sZ    v&&&%zz*;<<E5(("#\]]] )(rU   r  c                8    | j                                         dfS )Nz{bindir})r0   
get_bindirr   s    rV   r  z"Executable.get_default_install_dir  r  rU   c                    | j         S )z,Human friendly description of the executabler  r   s    rV   descriptionzExecutable.description  s
    yrU   c                    dS )Nz@exerT   r   s    rV   r  zExecutable.type_suffix      vrU   r   c                    | j         S z
        The name of the import library that will be outputted by the compiler

        Returns None if there is no import library required for this platform
        r)  r   s    rV   get_import_filenamezExecutable.get_import_filename       ##rU   c                    | j         S r  r  r   s    rV   r  zExecutable.get_debug_filename
  r  rU   c                    | j         S r   )r  r   s    rV   r<  zExecutable.is_linkable_target  s    ##rU   'ImmutableListProtocol[str]'c                    | j         S )zProvides compatibility with ExternalProgram.

        Since you can override ExternalProgram instances with Executables.
        r	  r   s    rV   get_commandzExecutable.get_command  s    
 |rU   c                V    t           j                            | j        | j                  S ),Provides compatibility with ExternalProgram.)r  r   r   r   r`  r   s    rV   r  zExecutable.get_path  s    w||DK777rU   rI   c                    dS )r?  TrT   r   s    rV   r  zExecutable.found   s    trU   r   r   r   r   r   r7   r/  r   rm   rM  rN  rO  rl   rP  r0   r   r  rQ  r  rB  r   )r   r;  r  r  )rP   rQ   rR   known_exe_kwargsr  r  r  rx  rh  r  r1  r  r7  r  r<  r=  r  r  r  r  s   @rV   r  r    s0       #LH/ / / / / /B@0 @0 @0 @0 @0 @0D^ ^ ^ ^ ^9 9 9 9    $ $ $ $# # # #$ $ $   8 8 8 8       rU   r  c                  b     e Zd ZeZdZd! fdZd" fdZd#dZd$dZ	d Z
 fdZd Zd%d Z xZS )&rC   zstatic libraryr   r   r   r   r7   r/  r   rm   rM  rN  rO  rl   rP  r0   r   r  rQ  c                    t          j        d|
                    dd                    | _        t	                                          |||||||||	|

  
         d S )NrI   r   F)r.  r/  rY  r   rW  r  r   r   r   r   r/  rm   rN  rl   r0   r  r  rq  s              rV   r  zStaticLibrary.__init__*  sc     vffjjE&B&BCCvz;I[]d$i	9 	9 	9 	9 	9rU   r   r   c                    t                                                       d j        v rt          d                                           r j        dk    r;t           fddD                       r t          d j         d j         d           j        d	k    rL j        d
         }t          j	        dg g |j
        g g g g g i g g g           } j                            |           t           d          sd _        t           d          sA                                 r& j        dk    rd _        n j        d	k    rd _        nd _         j         j        z   dz    j        z    _         j         j        d<   d S )Nr  z&Static libraries not supported for C#.r|  c              3  *   K   | ]}|j         v V  d S r   r  r[   r  r   s     rV   r  z*StaticLibrary.post_init.<locals>.<genexpr>@  s)      5^5^a49n5^5^5^5^5^5^rU   - r   Rust crate  type  does not allow spaces, periods or dashes in the library name due to a limitation of rustc. Replace them with underscores, for example	staticlibrs  r)  r   rK  r  rb  r   r   )rW  rx  r  r   rw  re   rm  r   r   r-  native_static_libsrY  r   r  r   r  r`  rb  )r   rustcr\  rq  s   `  rV   rx  zStaticLibrary.post_init:  s   4>!!"#KLLL>> 	-#v--#5^5^5^5^o5^5^5^2^2^-& (TTY (T (TdFZ (T (T (T U U U #{22 v. 3KR494L46BBBPRTVX X "))!,,, tX&& 	 DKtX&& 	"~~ "'611"(DKK)[88"%DK!di/#5C-QrU   r   r  c                    i S r   rT   r  s     rV   r  z#StaticLibrary.get_link_deps_mappingd  r?  rU   r  c                8    | j                                         dfS )Nz{libdir_static})r0   get_static_lib_dirr   s    rV   r  z%StaticLibrary.get_default_install_dirg      22446GGGrU   c                    dS )Nz@starT   r   s    rV   r  zStaticLibrary.type_suffixj  r3  rU   c                @   t                                          |           |                    d          }|                    d          }|r@|rt          d          |dk    r	d| _        d S |dv r	|| _        d S t          d|d          |d	k    rd
nd| _        d S )Nr   re   4rust_abi and rust_crate_type are mutually exclusive.rK  r|  >   r|  rO  Crate type z< invalid for static libraries; must be "rlib" or "staticlib"r  rO  )rW  rh  rY  r   re   r   r  r   re   rq  s       rV   rh  zStaticLibrary.process_kwargsm  s    v&&&::j)) **%677 
	N _&']^^^%'''-$$$ $999'6$$$&  (E_  (E  (E  (E  F  F  F2:c//;;vD   rU   c                    dS NTrT   r   s    rV   r<  z StaticLibrary.is_linkable_target~      trU   rI   c                    | j          S r   rS  r   s    rV   r  zStaticLibrary.is_internal  s    <rU   rA  r  r  rB  r  )rP   rQ   rR   known_stlib_kwargsr  r  r  rx  r  r  r  rh  r<  r  r  r  s   @rV   rC   rC   %  s        %LH9 9 9 9 9 9 (( (( (( (( (( ((T   H H H H  N N N N N"                 rU   rC   c                       e Zd ZeZdZdZd' fdZd( fdZd)dZ	d*dZ
d Z fdZd+d Zd+d!Zd" Zd,d$Zd% Zd& Z xZS )-rB   zshared libraryTr   r   r   r   r7   r/  r   rm   rM  rN  rO  rl   rP  r0   r   r  rQ  c                    d | _         d | _        d | _        d | _        d | _        d | _        d| _        t                                          |||||||||	|

  
         d S r;  )	r   	ltversionr   r   r)  ra  shared_library_onlyrW  r  rE  s              rV   r  zSharedLibrary.__init__  sx     +/*.>B"#"#( vz;I[]d$i	9 	9 	9 	9 	9rU   r   r   c                    t                                                                                        rF j        dk    r;t	           fddD                       r t          d j         d j         d          t           d          sd  _        t           d          sd  _	        d	 _
                                          d S )
Ncdylibc              3  *   K   | ]}|j         v V  d S r   r  rH  s     rV   r  z*SharedLibrary.post_init.<locals>.<genexpr>  s)      7`7`1TY7`7`7`7`7`7`rU   rI  rL  rM  rN  r   r  {0.prefix}{0.name}.{0.suffix})rW  rx  rw  re   rm  r   r   r  r   r  basic_filename_tpldetermine_filenames)r   rq  s   `rV   rx  zSharedLibrary.post_init  s    >> 	U#x//C7`7`7`7`P_7`7`7`4`4`/& (TTY (T (TdFZ (T (T (T U U U tX&& 	DKtX&& 	DK"A  """""rU   r   r  c                X   i }|                      |          }t          |           }||vrj|                                 }|                                 \  }}}t          j                            ||d         |          }|                    ||i           |                    |           |S r  )r  r   r  r  r  r   r   r  )	r   r   r8  mappingsoldr  r  r  news	            rV   r  z#SharedLibrary.get_link_deps_mapping  s    #%88@@1$77h%%''E 0022MGQ',,vwqz599CMM3*%%%rU   r  c                8    | j                                         dfS )Nz{libdir_shared})r0   get_shared_lib_dirr   s    rV   r  z%SharedLibrary.get_default_install_dir  rU  rU   c                .   d}d}d}| j         | _        d}d| j        v rd}d}d| _        d}n| j        j        | j                                                 rd}|                                 r1d}d}| j        j        	                    t          d	                    }nI|                                 r1d}d
}| j        j        	                    t          d	                    }nd}d}| j        r	d| _        nd| _        n| j        j        | j                                                 r0d}d}| j        | j        nd}|dz   }| j        rd| _        nd| _        n| j        j        | j                                                 rd}d}| j        rd| _        nfd| _        n^| j        j        | j                                                 rd}d}d| _        n)d}d}| j        rd| _        n| j        rd| _        nd| _        | j        || _        | j        || _        | j                            |           | _        |r|                    |           | _        | j        | j        d<   |r4t.          j                            | j                  d         dz   | _        dS dS )ax  
        See https://github.com/mesonbuild/meson/pull/417 for details.

        First we determine the filename template (self.filename_tpl), then we
        set the output filename (self.filename).

        The template is needed while creating aliases (self.get_aliases),
        which are needed while generating .so shared libraries for Linux.

        Besides this, there's also the import library name (self.import_filename),
        which is only used on Windows since on that platform the linker uses a
        separate library called the "import library" during linking instead of
        the shared library (DLL).
        r   FNr  dllrg  Tz{0.prefix}{0.name}.dll.librK   z{0.prefix}{0.name}.librK  z{0.prefix}{0.name}.dll.az+{0.prefix}{0.name}-{0.soversion}.{0.suffix}cygz{0.name}.dll.ar}  z+{0.prefix}{0.name}.{0.soversion}.{0.suffix}soz+{0.prefix}{0.name}.{0.suffix}.{0.ltversion}z+{0.prefix}{0.name}.{0.suffix}.{0.soversion}r   r&  )rh  filename_tplr  r0   r  r/  r  rw  r   r1  r   r  r   r'  r   r  r  rb  r  rp  r`  r)  rb  r  r   r  ra  )r   r   r  r+  import_filename_tplimport_prefixs         rV   ri  z!SharedLibrary.determine_filenames  s    ! 3" 4>!!FF ?D $ &t'78CCEE A	DF~~ A&B#$($4$=$H$HSZI[I[$\$\!!$$&& A&>#$($4$=$H$HSZI[I[$\$\!! &@#~ D$Q!!$C!!&t'78BBDD &	DF F+/;+BDKKM"/2B"B~ D$Q!!$C!!&t'78BBDD 	DFF~ D$Q!! %D!!&t'78CCEE 	DFF ?DFF~ D$Q!! D$Q!! %D!; DK; DK)0066 	D#6#=#=d#C#CD  -Q 	N"$'"2"24="A"A!"Dv"MD	N 	NrU   c                r   t                                          |           | j        j        | j                                                 st          j        d|                    d                    | _	        t          j        d|                    d                    | _
        | j
        ,| j	        %| j	                            d          d         | _
        t          j        d|                    d                    | _        | j        | j
        | j
        | j
        f| _        |                     |           |                    d          }|                    d	          }|r@|rt          d
          |dk    r	d| _        d S |dv r	|| _        d S t          d|d          |dk    rdnd| _        d S )Nr   r   r   r   r   zT.Optional[T.Tuple[str, str]]r   r   re   rX  rK  r}  >   r}  re  r  rY  zH invalid for shared libraries; must be "dylib", "cdylib" or "proc-macro"r  re  )rW  rh  r0   r  r/  r  r.  r/  rY  rb  r   r4  r   r  r   re   rZ  s       rV   rh  zSharedLibrary.process_kwargs2	  s   v&&&()9:EEGG 	HV$5vzz)7L7LMMDNV$5vzz+7N7NOODN~%$.*D "&!5!5c!:!:1!=#$6*I6::VgKhKh#i#iD #+0J(,'G$ 	&&v...::j)) **%677 
	L _&']^^^%'''.$$$ $EEE'6$$$&  (Q_  (Q  (Q  (Q  R  R  R/7388GD   rU   r   c                    | j         S r5  r6  r   s    rV   r7  z!SharedLibrary.get_import_filenameU	  r8  rU   c                    | j         S r  r  r   s    rV   r  z SharedLibrary.get_debug_filename]	  r  rU   c                2    | g|                                  z   S r   r  r   s    rV   r  zSharedLibrary.get_all_link_depse	  s    v557777rU   rc  c                   g }| j         dvs| j        s|S | j         dk    rt| j        rm| j        | j        k    r]| j                            dd          }|                    |           }| j        d         pd}|                    || j        |f           n| j        }| j        d         pd}|                    | j	                            |           ||f           |S )a#  
        If the versioned library name is libfoo.so.0.100.0, aliases are:
        * libfoo.so.0 (soversion) -> libfoo.so.0.100.0
        * libfoo.so (unversioned; for linking) -> libfoo.so.0
        Same for dylib:
        * libfoo.dylib (unversioned; for linking) -> libfoo.0.dylib
        )rs  r}  rs  rb  r   r   runtimeru  )
r  r   rb  rt  r  rp  rt   r   r`  rh  )r   aliases	alias_tplltversion_filenametags        rV   re  zSharedLibrary.get_aliasesh	  s     35 ;o--T^-N
 ;$4>dn6V6V)11+{KKI!*!1!1$!7!7"1%2CNN.sCDDDD "& q!,W/66t<<>PRUVWWWrU   c                    dS )Nz@sharT   r   s    rV   r  zSharedLibrary.type_suffix	  r3  rU   c                    dS r\  rT   r   s    rV   r<  z SharedLibrary.is_linkable_target	  r]  rU   rA  r  r  rB  r   r  )rP   rQ   rR   known_shlib_kwargsr  r  aix_so_archiver  rx  r  r  ri  rh  r7  r  r  re  r  r<  r  r  s   @rV   rB   rB     s7       %LH N9 9 9 9 9 94# # # # # # 
 
 
 
H H H HkN kN kNZ!L !L !L !L !LF$ $ $ $# # # #8 8 8   @        rU   rB   c                  4     e Zd ZeZdZdZd fdZddZ xZ	S )r  zshared moduleFr   r   r   r   r7   r/  r   rm   rM  rN  rO  rl   rP  r0   r   r  rQ  c                    d|
v rt          d          d|
v rt          d          t                                          |||||||||	|

  
         d| _        d S )Nr   z2Shared modules must not specify the version kwarg.r   z4Shared modules must not specify the soversion kwarg.F)r   rW  r  r  rE  s              rV   r  zSharedModule.__init__	  s}      !UVVV&   !WXXXvz;+Wk9f	V 	V 	V "rU   r   r  c                8    | j                                         dfS )Nz{moduledir_shared})r0   get_shared_module_dirr   s    rV   r  z$SharedModule.get_default_install_dir	  s    55779MMMrU   rA  rB  )
rP   rQ   rR   known_shmod_kwargsr  r  r  r  r  r  r  s   @rV   r  r  	  sj        %LH N" " " " " ",N N N N N N N NrU   r  c                  &    e Zd ZddZdd	ZddZdS )BothLibrariessharedrB   staticrC   r   r   c                R    d| _         || _        || _        | j        j        | _        d S )Nr  )_preferred_libraryr  r  r   )r   r  r  s      rV   r  zBothLibraries.__init__	  s(    "*+0rU   r   c                \    dt          | j                   dt          | j                   dS )Nz<BothLibraries: static=z	; shared=>)reprr  r  r   s    rV   rt  zBothLibraries.__repr__	  s/    Ydk):):YYT$+EVEVYYYYrU   rD   c                z    | j         dk    r| j        S | j         dk    r| j        S t          d| j          d          )Nr  r  zself._preferred_library == "z#" is neither "shared" nor "static".)r  r  r  r!   r   s    rV   get_default_objectz BothLibraries.get_default_object	  sK    "h..;$00; {t?V { { {|||rU   N)r  rB   r  rC   r   r   r  )r   rD   )rP   rQ   rR   r  rt  r  rT   rU   rV   r  r  	  sZ        1 1 1 1Z Z Z Z} } } } } }rU   r  c                  6    e Zd ZU ded<   ded<   ded<   ddZdS )CommandBaser   r]  ,T.List[T.Union[BuildTarget, 'CustomTarget']]r   r   r   cmdJT.Sequence[T.Union[str, File, programs.ExternalProgram, BuildTargetTypes]]r   7T.List[T.Union[str, File, BuildTarget, 'CustomTarget']]c           	        t          |          }g }|D ]U}t          |t                    r|                    |           .t          |t                    r0| j                            |           |                    |           st          |t          j                  r|                                st          d          |
                                }t          j                            |          r,| j                            t	          j        |                     ||                                z  }(t          |t           t"          f          r1| j                            |           |                    |           ut          |t&                    rt)          j        dd| j                   | j                            |j                   ||                     t	          j        |                                |                                                    z  }t          |t8                    r||                     |          z  }Dt          d|d          |S )Nz4Tried to use not-found external program in "command"z&CustomTargetIndex for command argumentz0.60r  z in "command" is invalid)r   r  r   r   r   r]  r   r  r  r   r  r  r   r  r  r=  rD   r?   r   r@   r,   r  r   r  flatten_commandr  r  r  r$  )r   r  	final_cmdr  r   s        rV   r  zCommandBase.flatten_command	  s7   cllMO	 	R 	RA!S!! R  ####At$$ R!((+++  ####Ax788 Rwwyy c*+abbbzz||7==&& L %,,T-DT-J-JKKKQ]]__,		A\:;; 
R!((+++  ####A011 R%&NPVX\Xghhh!((222T11$2Fq||~~WXWeWeWgWg2h2hiii		At$$ RT11!444		&'P1'P'P'PQQQrU   N)r  r  r   r  )rP   rQ   rR   rS   r  rT   rU   rV   r  r  	  sK         >>>>OOO     rU   r  c                  0    e Zd ZdZdZddd
ZddZddZdS )CustomTargetBasez Base class for CustomTarget and CustomTargetIndex

    This base class can be used to provide a dummy implementation of some
    private methods to avoid repeating `isinstance(t, BuildTarget)` when dealing
    with custom targets.
    r   Tr8  r  r  rI   r   r   c                    d S r   rT   )r   r8  r  s      rV   r  z)CustomTargetBase.get_dependencies_recurse	      rU   c                    t                      S r   r   r   s    rV   rJ  z.CustomTargetBase.get_internal_static_libraries	      ||rU   c                    d S r   rT   rN  s     rV   rM  z6CustomTargetBase.get_internal_static_libraries_recurse	  r  rU   Nr  r  r  r  )rP   rQ   rR   rf  re   r  rJ  rM  rT   rU   rV   r  r  	  sf          O            rU   r  c                      e Zd ZdZddddddddddddddddddY fd,ZdZd/Zd0 Zd[d2Zd\d4Zd5 Z	d]d6Z
d^d8Zd_d:Zd`d;Zdad<Zdbd>Zdcd@ZdcdAZdB ZdddDZd]dEZd]dFZdedIZdfdKZdL Zd]dMZdgdOZdP ZdhdTZdU ZdV ZdW ZdidXZ  xZ!S )jr?   customFNz#Generating {} with a custom command)r  r|   r  r  r]  r  r  r  feedrk   rs   rw   rt   absolute_pathsbackendr1  r   r   r   r   r   r0   r   commandYT.Sequence[T.Union[str, BuildTargetTypes, GeneratedList, programs.ExternalProgram, File]]rm   kT.Sequence[T.Union[str, File, BuildTargetTypes, ExtractedObjects, GeneratedList, programs.ExternalProgram]]rb  r   r  rI   r|   r   r  r  r]  $T.Optional[T.Sequence[FileOrString]]r  3T.Optional[T.Sequence[T.Union[str, SourceOutputs]]]r  r  r  r  rk   rs   0T.Optional[T.List[T.Union[str, Literal[False]]]]rw   T.Optional[FileMode]rt   r   r  r  T.Optional['Backend']r1  c          
        t                                          |||dt          j        |||           t	          |          | _        t          |t          t          ||          g                     | _	        |	|	n|| _
        |
| _        || _        t	          |pg           | _        g | _        |                     |          | _        || _        |pt%                      | _        t	          |pg           | _        || _        t	          |pg           | _        || _        t1          |t3          | j	                            | _        |r|n| j	        d         | _        || _        || _        d S )NFr   )rW  r  r   HOSTr$  rm   r   r   get_sources_string_namesrb  r|   r  r  r]  r   r  r  r  r"   r  r  r  rs   rw   r   r   rt   r   r1  r  )r   r   r   r   r0   r  rm   rb  r  r|   r  r  r]  r  r  r  r  rk   rs   rw   rt   r  r  r1  rq  s                           rV   r  zCustomTarget.__init__	  sh   > 	vz5-:Lk "4	6 	6 	6G}}(1('::   5E4P 0 0V] !344HJ++G440.00!-"5266	 1r22(/S=N=NOO 5DDdl1o	& -rU   r   r  c                    dS )N)NNrT   r   s    rV   r  z$CustomTarget.get_default_install_dir9
      zrU   c                v    d}|                     | j        j        |                                 | j                  S rz  rp  rq  rP   r  r  r|  s     rV   rt  zCustomTarget.__repr__<
  s,    #t~6t|TTTrU   #T.List[T.Union[SourceOutputs, str]]c                D   g }|                     | j                   |                     | j                   | j        D ]a}t	          |t
                    r|                    |j                   2t	          |t          j	                  s|                    |           b|S r   )
r  r   r  rm   r  r@   r   r  r   r  )r   r5  r  s      rV   get_target_dependenciesz$CustomTarget.get_target_dependencies@
  s    46D%&&&D&''' 	 	A!.// AH%%%%8#;<< ArU   +T.Set[T.Union[BuildTarget, 'CustomTarget']]c                "   t                      }|                                 }|D ]i}t          |t                    r|                    |           -t          |t
                    r'|                    |                                           j|S )a  
        Recursively fetch the build targets that this custom target depends on,
        whether through `command:`, `depends:`, or `sources:` The recursion is
        only performed on custom targets.
        This is useful for setting PATH on Windows for finding required DLLs.
        F.ex, if you have a python script that loads a C module that links to
        other DLLs in your project.
        )r   r  r  rD   r  r?   r   get_transitive_build_target_deps)r   bdepsr5  r\  s       rV   r  z-CustomTarget.get_transitive_build_target_depsK
  s     >AUU++-- 	C 	CA![)) C		!A|,, CQ??AABBBrU   c                    | j         S r   r   r   s    rV   r  zCustomTarget.get_dependencies]
  rU  rU   c                    | j         S r   rS  r   s    rV   rA  zCustomTarget.should_install`
  r   rU   r  c                    | j         S r   r  r   s    rV   r   z#CustomTarget.get_custom_install_dirc
  r  rU   r  c                    | j         S r   r  r   s    rV   r   z$CustomTarget.get_custom_install_modef
  rU  rU   c                    | j         S r   r	  r   s    rV   r  zCustomTarget.get_outputsi
  r   rU   c                    | j         d         S r  r	  r   s    rV   r  zCustomTarget.get_filenamel
  s    |ArU   cT.List[T.Union[str, File, BuildTarget, GeneratedTypes, ExtractedObjects, programs.ExternalProgram]]c                    | j         S r   r   r   s    rV   r   zCustomTarget.get_sourceso
  r   rU   T.List[GeneratedList]c                r    g }| j         D ],}t          |t                    r|                    |           -|S r   )rm   r  rA   r   )r   genlistsr  s      rV   get_generated_listsz CustomTarget.get_generated_listsr
  sB    *, 	# 	#A!]++ #"""rU   c                *    |                                  S r   )r  r   s    rV   r  z"CustomTarget.get_generated_sourcesy
  s    '')))rU   c                t   | j         t          d          |ryt          j                            |d                   }t          j                            |          d         }| j                             d|                              d|          S d| j         v s	d| j         v rt          d          | j         S )NzOTried to get depfile name for custom_target that does not have depfile defined.r   r  r  zKSubstitution in depfile for custom_target that does not have an input file.r  )r   infilenamesr  r  s       rV   r  zCustomTarget.get_dep_outname|
  s    <"#tuuu 	 ((Q88Iw''	2215H<''h??GGW`aaat|++}/L/L&'tuuu<rU   r  c                b    |                     d          rdS t          j        d|          rdS dS )N)r%  z.dllr$  z.sor   Tz\.so(\.\d+)*$F)endswithresearch)r   r  s     rV   is_linkable_outputzCustomTarget.is_linkable_output
  s;    ??BCC 	49%v.. 	4urU   c                v    t          | j                  dk    rdS |                     | j        d                   S )Nr
   Fr   )r   rb  r  r   s    rV   r<  zCustomTarget.is_linkable_target
  s6    t|!!5&&t|A777rU   c                j    t           j                            | j        d                   d         }|dvS )Whether this target links dynamically or statically

        Does not assert the target is linkable, just that it is not shared

        :return: True if is dynamically linked, otherwise False
        r      r%  r$  )r  r   r  rb  r   sufs     rV   rH  zCustomTarget.links_dynamically
  s/     gt|A//3.((rU   r   r  c                    i S r   rT   r  s     rV   r  z"CustomTarget.get_link_deps_mapping
  r?  rU   r  c                    t                      S r   r  r   s    rV   r  z!CustomTarget.get_link_dep_subdirs
  r  rU   c                    g S r   rT   r   s    rV   r  zCustomTarget.get_all_link_deps
  r?  rU   c                    t          | j                  dk    rdS t          | | j        d                                                   S )zI
        Returns True if this is a not installed static library.
        r
   Fr   )r   rb  r@   r  r   s    rV   r  zCustomTarget.is_internal
  s@     t|!!5 t|A77CCEEErU   (T.List[T.Union[str, 'ExtractedObjects']]c                *    |                                  S r   )r  r   s    rV   r  z CustomTarget.extract_all_objects
  s    !!!rU   c                    dS )Nz@cusrT   r   s    rV   r  zCustomTarget.type_suffix
  r3  rU   indexr   'CustomTargetIndex'c                8    t          | | j        |                   S r   )r@   rb  r   r  s     rV   __getitem__zCustomTarget.__getitem__
  s     t|E':;;;rU   c                    t           r   r  )r   r  r0  s      rV   __setitem__zCustomTarget.__setitem__
  r  rU   c                    t           r   r  r  s     rV   __delitem__zCustomTarget.__delitem__
  r  rU   c              #  B   K   | j         D ]}t          | |          V  d S r   )rb  r@   )r   r  s     rV   __iter__zCustomTarget.__iter__
  s:       	- 	-A#D!,,,,,,	- 	-rU   c                *    t          | j                  S r   )r   rb  r   s    rV   __len__zCustomTarget.__len__
  s    4<   rU   ).r   r   r   r   r   r   r0   r   r  r  rm   r  rb  r   r  rI   r|   r   r  rI   r  rI   r]  r  r  r  r  r   r  r  r  rI   rk   rI   rs   r  rw   r  rt   r   r  rI   r  r  r1  r   rB  )r   r  )r   r  r  rC  r  r  r  )r   r  )r   r  )r  r   r   rI   r  r  r   r  )r  r   r   r  )r   r   )"rP   rQ   rR   r  r  r  rt  r  r  r  rA  r   r   r  r  r   r  r  r  r  r<  rH  r  r  r  r  r  r  r  r  r  r  r  r  r  s   @rV   r?   r?   	  s       H -26:!&!&FJVZ,09=#!&QU6:DH(-26$I98- 8- 8- 8- 8- 8- 8- 8-t   U U U	 	 	 	   $! ! !          ! ! ! !            * * * *
  
  
    8 8 8 8
) ) ) )        F F F F" " " "  < < < <" " "" " "- - -! ! ! ! ! ! ! !rU   r?   c                  P     e Zd ZdZdZd fdZd dZed!d            Zd"dZ	 xZ
S )#CompileTargetz|
    Target that only compile sources without linking them together.
    It can be used as preprocessor, or transpiler.
    compiler   r   r   r   r0   r   rm   rM  output_templr-  r3   r  r2   compile_argsr   r~   rL   r   r9  c                   |                                 |i}dd|j         d|	d|
d|i}t                                          ||||j        |d g |||
  
         || _        || _        || _        g | _        i | _	        | j
        D ]}|                     |           | j        D ]W}|                                D ]@}|                    | ||          }|                     t          j        |                     AXd S )Nr|   FrZ   r~   r   )rZ  r  rW  r  r/  r`  r-  r  rb  sources_maprm   _add_outputr  r  get_target_generated_dirr   from_built_relative)r   r   r   r   r0   rm   r  r-  r  r  r~   r   r  r  r  r  r  rel_srcrq  s                     rV   r  zCompileTarget.__init__
  sD    **,,h7	 '''!#6L	
 	vz83G $KF	L 	L 	L (.0 	  	 AQn 	D 	DF'')) D D!::4KK  !9'!B!BCCCCD	D 	DrU   r   c                    dS )Nz@compilerT   r   s    rV   r  zCompileTarget.type_suffix
  r  rU   rI   c                    dS r;  rT   r   s    rV   r  zCompileTarget.is_unity
  s    urU   r  r   r   c                >   t           j                            |j                  }t           j                            |          d         }| j                            d|                              d|          }| j                            |           || j	        |<   d S )Nr   r  r  )
r  r   r  r  r  r  r  rb  r   r  )r   r  r  r  r9  s        rV   r  zCompileTarget._add_output
  s    G$$QW--	7##I..q1%%lH==EEmU^__ArU   )r   r   r   r   r   r   r0   r   rm   rM  r  r   r-  r3   r  r2   r  r   r~   rL   r   r9  r  r  )r  r   r   r   )rP   rQ   rR   rf  r  r  r  r  r  r  r  r  s   @rV   r  r  
  s         
 HD D D D D DB       X               rU   r  c                  j     e Zd ZdZ	 	 d d! fdZd"dZd#dZd$dZd%dZd&dZ	d"dZ
d'dZd"dZ xZS )(	RunTargetrunNTr   r   r  JT.Sequence[T.Union[str, File, BuildTargetTypes, programs.ExternalProgram]]r   T.Sequence[Target]r   r   r0   r   r  "T.Optional['EnvironmentVariables']default_envrI   c	                    t                                          |||dt          j        |           || _        g | _        |                     |          | _        d| _        || _	        || _
        d S r;  )rW  r  r   r  r   r]  r  r  r  r  r  )
r   r   r  r   r   r   r0   r  r  rq  s
            rV   r  zRunTarget.__init__  sl     	vz5-:M{[[[(++G44#&rU   r   c                    d}|                     | j        j        |                                 | j        d                   S )Nr{  r   r  r|  s     rV   rt  zRunTarget.__repr__  s1    #t~6t|TUWWWrU   r  c                    | j         S r   r   r   s    rV   r  zRunTarget.get_dependencies  rU  rU   r  c                    g S r   rT   r   s    rV   r  zRunTarget.get_generated_sources  r?  rU   r   c                    g S r   rT   r   s    rV   r   zRunTarget.get_sources  r?  rU   c                    dS r;  rT   r   s    rV   rA  zRunTarget.should_install   r=  rU   c                    | j         S r   r  r   s    rV   r  zRunTarget.get_filename#  rJ  rU   r   c                    t          | j        t                    r| j        gS t          | j        t                    r| j        S t	          d          )NzBRunTarget: self.name is neither a list nor a string. This is a bug)r  r   r   r$  r  r   s    rV   r  zRunTarget.get_outputs&  sM    di%% 	eI;	4(( 	e9cdddrU   c                    dS )Nz@runrT   r   s    rV   r  zRunTarget.type_suffix.  r3  rU   r\  )r   r   r  r  r   r  r   r   r   r   r0   r   r  r  r  rI   r  )r   r  r  r   r  r  )rP   rQ   rR   r  r  rt  r  r  r   rA  r  r  r  r  r  s   @rV   r   r   
  s        H <@%)' ' ' ' ' ' '"X X X X! ! ! !            e e e e       rU   r   c                  *     e Zd ZdZd fd
Zd Z xZS )AliasTargetaliasr   r   r   T.Sequence['Target']r   r   r0   r   c                T    t                                          |g ||||           d S r   )rW  r  )r   r   r   r   r   r0   rq  s         rV   r  zAliasTarget.__init__5  s+    r<[QQQQQrU   c                j    d}|                     | j        j        |                                           S )Nz	<{0} {1}>)rp  rq  rP   r  r|  s     rV   rt  zAliasTarget.__repr__9  s(    t~6FFFrU   )
r   r   r   r  r   r   r   r   r0   r   )rP   rQ   rR   r  r  rt  r  r  s   @rV   r  r  1  s^        HR R R R R RG G G G G G GrU   r  c                  \     e Zd ZeZdZd fdZd Zd Zd Z	ddZ
d Zd Zd ZddZ xZS )Jarjarr   r   r   r   r/  r   rm   T.List[SourceOutputs]rN  T.Optional['StructuredSources']r0   r   r  rQ  c                   t                                          |||||||||	|

  
         | j        D ]*}|                    d          st	          d| d          +| j        D ]*}t          |t                    st	          d| d          +| j        rt	          d          | j	        dz   | _
        | j
        g| _        | j        d         | _        |
                    d	d
          | _        |
                    dd           | _        d S )Nz.javazJar source z is not a java file.zLink target z is not a jar target.z5structured sources are not supported in Java targets.z.jarr  r   r   r   )rW  r  rm   r  r   r[  r  r  rN  r   r`  rb  rc  	java_argsrY  r   r   )r   r   r   r   r/  rm   rN  rl   r0   r  r  r  r  rq  s                rV   r  zJar.__init__B  s<    	vz;I[]d$i	9 	9 	9 	N 	NA::g&& N&'LQ'L'L'LMMMN" 	P 	PAa%% P&'Na'N'N'NOOOP" 	\"#Z[[[	F*0 **\266=CZZHXZ^=_=_rU   c                    | j         S r   )r   r   s    rV   get_main_classzJar.get_main_classV  r?  rU   c                    dS )Nz@jarrT   r   s    rV   r  zJar.type_suffixY  r3  rU   c                    | j         S r   )r  r   s    rV   get_java_argszJar.get_java_args\  r  rU   r   rO  c                    | j         S r   )r   r   s    rV   get_java_resourceszJar.get_java_resources_  r   rU   c                    d S r   rT   r   s    rV   rp  zJar.validate_installb  r  rU   c                    dS r\  rT   r   s    rV   r<  zJar.is_linkable_targetf  r]  rU   c                    d | j         D             }t          j                            |          }|r!dt          j                            |          gS g S )Nc                    g | ]F}t           j                            |                                |                                          GS rT   )r  r   r   r  r  r   s     rV   r   z*Jar.get_classpath_args.<locals>.<listcomp>j  s:    ^^^qBGLL1A1ABB^^^rU   z-cp)r[  r  pathsepr   )r   cp_paths	cp_strings      rV   get_classpath_argszJar.get_classpath_argsi  sQ    ^^DL]^^^JOOH--	 	62:??84455	rU   r  c                8    | j                                         dfS )Nz{jardir})r0   get_jar_dirr   s    rV   r  zJar.get_default_install_dirp  s    ++--z99rU   )r   r   r   r   r   r   r/  r   rm   r  rN  r  r0   r   r  rQ  )r   rO  rB  )rP   rQ   rR   known_jar_kwargsr  r  r  r  r  r   r"  rp  r<  r*  r  r  r  s   @rV   r  r  =  s        #LH` ` ` ` ` `(      # # # #      : : : : : : : :rU   r  c                      e Zd ZU dZdZded<   ded<   ded<   d#dZed$d            Zd Z	d%dZ
d$dZd$dZd$dZd Zd&dZd'dZd(dZd(dZd(dZd(dZd)dZd*d!Zd"S )+r@   zA special opaque object returned by indexing a CustomTarget. This object
    exists in Meson, but acts as a proxy in the backends, making targets depend
    on the CustomTarget it's derived from, but only adding one source file to
    the sources.
    r  zT.ClassVar[str]r  z$T.Union[CustomTarget, CompileTarget]r  r   r  r   r   c                (    | j         j        | _        d S r   )r  r/  r   s    rV   r  zCustomTargetIndex.__post_init__  s    ;2rU   c                0    | j         j         d| j         dS )N[])r  r   r  r   s    rV   r   zCustomTargetIndex.name  s     +"33T[3333rU   c                B    d                     | j        | j                  S )Nz<CustomTargetIndex: {!r}[{}]>)rp  r  r  r   s    rV   rt  zCustomTargetIndex.__repr__  s    .55dk4;OOOrU   r   c                    | j         gS r   r  r   s    rV   r  zCustomTargetIndex.get_outputs  s    }rU   c                4    | j                                         S r   )r  r  r   s    rV   r  zCustomTargetIndex.get_subdir  s    {%%'''rU   c                    | j         S r   r5  r   s    rV   r  zCustomTargetIndex.get_filename  rw  rU   c                4    | j                                         S r   )r  r  r   s    rV   r  zCustomTargetIndex.get_id  s    {!!###rU   c                4    | j                                         S r   )r  r  r   s    rV   r  z#CustomTargetIndex.get_all_link_deps  s    {,,...rU   r   r  c                6    | j                             |          S r   )r  r  r  s     rV   r  z'CustomTargetIndex.get_link_deps_mapping  s    {00888rU   r  c                4    | j                                         S r   )r  r  r   s    rV   r  z&CustomTargetIndex.get_link_dep_subdirs  s    {//111rU   rI   c                @    | j                             | j                  S r   )r  r  r  r   s    rV   r<  z$CustomTargetIndex.is_linkable_target  s    {--dk:::rU   c                ^    t           j                            | j                  d         }|dvS )r  r  r  )r  r   r  r  r  s     rV   rH  z#CustomTargetIndex.links_dynamically  s+     gt{++B/.((rU   c                4    | j                                         S r   )r  rA  r   s    rV   rA  z CustomTargetIndex.should_install  s    {))+++rU   c                    t           j                            | j                  d         }|dv o|                                  S )zH
        Returns True if this is a not installed static library
        r  r  )r  r   r  r  rA  r  s     rV   r  zCustomTargetIndex.is_internal  s?     gt{++B/n$BT-@-@-B-B)BBrU   r  c                4    | j                                         S r   )r  r  r   s    rV   r  z%CustomTargetIndex.extract_all_objects  s    {..000rU   r  c                4    | j                                         S r   )r  r   r   s    rV   r   z(CustomTargetIndex.get_custom_install_dir  s    {11333rU   Nr  r  r  r  r  r  r  rC  )rP   rQ   rR   rf  r  rS   r  r  r   rt  r  r  r  r  r  r  r  r<  rH  rA  r  r  r   rT   rU   rV   r@   r@   s  s          !)H((((0000KKK3 3 3 3 4 4 4 X4P P P   ( ( ( (   $ $ $ $/ / /9 9 9 92 2 2 2; ; ; ;) ) ) ), , , ,C C C C1 1 1 14 4 4 4 4 4rU   r@   c                  L     e Zd Z	 dd fdZddZdd
ZddZddZddZ xZ	S )ConfigurationDataNinitial_valuesyT.Optional[T.Union[T.Dict[str, T.Tuple[T.Union[str, int, bool], T.Optional[str]]], T.Dict[str, T.Union[str, int, bool]]]]c                    t                                                       |rd |                                D             ni | _        d| _        d S )Nc                L    i | ]!\  }}|t          |t                    r|n|d f"S r   )r  tuple)r[   r)  r*  s      rV   r  z.ConfigurationData.__init__.<locals>.<dictcomp>  s5    \\\TQQZ5))84y\\\rU   F)rW  r  r  r  used)r   rD  rq  s     rV   r  zConfigurationData.__init__  sV     	`nv\\^EYEYE[E[\\\\tv 				rU   r   r   c                *    t          | j                  S r   )r  r  r   s    rV   rt  zConfigurationData.__repr__      DK   rU   r0  rI   c                    || j         v S r   r  )r   r0  s     rV   __contains__zConfigurationData.__contains__  s    ##rU   c                *    t          | j                  S r   )rI   r  r   s    rV   r  zConfigurationData.__bool__  rK  rU   r   1T.Tuple[T.Union[str, int, bool], T.Optional[str]]c                    | j         |         S r   rM  r  s     rV   rY  zConfigurationData.get  s    {4  rU   T.Iterator[str]c                4    | j                                         S r   )r  r  r   s    rV   r  zConfigurationData.keys  s    {!!!rU   r   )rD  rE  r  )r0  r   r   rI   r  )r   r   r   rP  )r   rR  )
rP   rQ   rR   r  rt  rN  r  rY  r  r  r  s   @rV   rC  rC    s                      ! ! ! !$ $ $ $! ! ! !! ! ! !" " " " " " " "rU   rC  c                      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	Zded<   ddZd	S )Datar   rm   r   rs   r   r   rw   r   Nr   renamer   rt   	data_typer   r   r   r   c                D    | j         d | j        D             | _         d S d S )Nc                V    g | ]&}t           j                            |j                  'S rT   )r  r   r  r  r  s     rV   r   z&Data.__post_init__.<locals>.<listcomp>  s*    KKK27++AG44KKKrU   )rV  rm   r   s    rV   r  zData.__post_init__  s-    ;KKdlKKKDKKK rU   r  )	rP   rQ   rR   rS   rV  rt   rW  r   r  rT   rU   rV   rU  rU    s         OOOF#'K''''I(,O,,,,L L L L L LrU   rU  c                  N    e Zd ZU ded<   ded<   ded<   ded<   dZded<   ddZdS )SymlinkDatar   r  r   rs   r   Nr   rt   r   r   c                    | j         t          j                            | j                   k    rt	          d| j          d          d S )NzLink name is "zX", but link names cannot contain path separators. The dir part should be in install_dir.)r   r  r   r  r   r   s    rV   r  zSymlinkData.__post_init__  sZ    9((3333" $LDI $L $L $L M M M 43rU   r  )rP   rQ   rR   rS   rt   r  rT   rU   rV   r[  r[    sh         KKKIIIOOO#'K''''M M M M M MrU   r[  c                  B    e Zd ZU ded<   ded<   ded<   ded<   ded	<   d
S )	TestSetupr   exe_wrapperrI   gdbr   timeout_multiplierr"   r  exclude_suitesNrO   rT   rU   rV   r^  r^    sK         IIIrU   r^  c                   g }| D ]}t          |t                    r|                    |           -t          |t          t          t
          t          f          r||                                z  }mt          |t                    r||	                    |          z  }t          |t                    r|                    |j                   t          d|          |S )zw
    For the specified list of @sources which can be strings, Files, or targets,
    get all the output basenames.
    zUnknown source type: )r  r   r   rD   r?   r@   rA   r  rE   determine_ext_objsr   r  rq  )rm   r  namesr  s       rV   r  r    s    
 E 
@ 
@a 		@LLOOOOK7H-XYY 	@Q]]__$EE+,, 	@W//222EE4   	@LL!!!! !>!>!>???LrU   r  c                    t           j                            | dd          }	 t          |dt                    }t          j        |           |j        _        |S # t          $ r t          d|d          w xY w)Nzmeson-privatez	build.datz
Build datazNo such build data file as r   )
r  r   r   r#   r   r   loadr0   FileNotFoundErrorr   )r  r`  bs      rV   rg  rg    s    w||IDDHJ,66!)y!9!9 J J JH8HHHIIIJs   5A A7objr`  r   c                    | j         j        }d | j         _        	 t          |d          5 }t          j        | |           d d d            n# 1 swxY w Y   || j         _        d S # || j         _        w xY w)Nwb)r0   r   openpickledump)rj  r`  cdatar  s       rV   saverq    s    O$E#CO)(D!! 	 QKQ	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  $)   5 ((((s.   A% A A% AA% AA% %A3)rt   r   r   r   r   r   r  )r  r   r   r   )rj  r   r`  r   r   r   )
__future__r   collectionsr   r   dataclassesr   r   r   	functoolsr	   rE  r
  r  r  r  rn  r  r  typingr.  r   r   r   r   r   mesonlibr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r  r$   r%   r&   r'   r(   r)   r*   r+   interpreterbaser,   r-   TYPE_CHECKINGtyping_extensionsr.   r/   r0   _typingr1   backend.backendsr2   r3   interpreter.interpreterr4   r5   interpreter.interpreterobjectsr6   r7   linkers.linkersr8   r9   r:   r;   r  r<   mparserr=   wrapr>   UnionrF   LibTypesrR  r   ObjectTypesrH   
pch_kwargslang_arg_kwargsvala_kwargsrust_kwargs	cs_kwargsbuildtarget_kwargsr  rB  r  r  r_  r-  r   r   r   r   r   r   r   r   r   r   rh  rE   r  ABCMetar  rD   r  r  r  rA   r  rC   rB   r  r  r  r  r?   r  r   r  r  r@   rC  rU  r[  r^  r  rg  rq  rT   rU   rV   <module>r     s   # " " " " " 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1       



          				  				                                                                                            ; : : : : : : :? ,44444444......))))))######CCCCCCCC444444++++++------IIIIIIIIII$$$$$$!!!!!!WQRNw\]HwQR'#v'9;KKLK, , , , ,I , , , y!
<<m<<<      766 "78)$	   :   	
   -/d/d/dd .1z1z1zz .2BJ1OO .1O1O1OO #|5E&FF 	 	 	 	 4   	 	 	 	 	~ 	 	 	 e       
 e( ( ( ( (n ( ( (6 e    .   " e( ( ( ( (~ ( ( ( e- - - - - - - - e
 
 
 
 
 
 
 
D: D: D: D: D: D: D: D:L e$ $ $ $ $. $ $ $L e3T 3T 3T 3T 3T~ 3T 3T 3Tl e5!!!- - - - - - - "!-` e| | | | |^s{ | | | ||~( ~( ~( ~( ~(& ~( ~( ~(@ 	 	 	 	 	 	 	 	       .U U U U U U U Up eD D D D DN D D DNY Y Y Y Y Y Y Yx]  ]  ]  ]  ] K ]  ]  ] ~H H H H HK H H HXN N N N N= N N NB} } } } }% } } }"$ $ $ $ $ $ $ $L       &I! I! I! I! I!6+[ I! I! I!V5  5  5  5  5 K 5  5  5 p1 1 1 1 1 1 1 1f
G 
G 
G 
G 
G) 
G 
G 
G4: 4: 4: 4: 4:+ 4: 4: 4:l eG4 G4 G4 G4 G4(. G4 G4 G4R" " " " " " " "6 eL L L L L> L L L e
M 
M 
M 
M 
M. 
M 
M 
M e                 &J J J J) ) ) ) ) )rU   