
    -Ph!                   ~	   d dl mZ d dlmZmZmZ d dl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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/m0Z0 ddl1m2Z2 ddl3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z; ddl<m=Z=m>Z> ej?        rd dl@mAZAmBZB ddlmCZC ddlDmEZE ddlFmGZG ddl3mHZH ddlImJZJmKZK ddlLmMZMmNZN ddl<mOZO ddlPmQZQ ddlmRZRmSZSmTZT ddlUmVZV ddlWmXZX ejY        d         ZZejY        d         Z[ejY        d         Z\ejY        e]ddd f         Z^ G d! d"eB          Z_d#d$hZ`d% e9D             Zaeah d&z  Zah d'Zbd(d)hZcd*d+hZdh d,Zeeeeaz  e`z  ebz  ecz  edz  Zfefh d-z  Zgefh d.z  Zhefd/d0hz  Ziefh d1z  Zjegd2d3hz  Zkdd:Zl e
d;          dd=            Zm G d> d?e          Zn ed@A           G dB dCe                      Zo ed@A           G dD dEe                      Zp ed@A           G dF dGe                      Zq ed@A           G dH dIe                      Zr ed@A           G dJ dKe                      Zs ed@A           G dL dM                      Zt G dN dO          Zu ed@A           G dP dQe                      Zv ed@A           G dR de                      Zw ed@d@S           G dT dUe                      Zx ed@A           G dV dWeejy        X                      Zz G dY dZez          Z{ G d[ d\          Z| G d] d^          Z} G d_ d`e          Z~ ed@A           G da dbe                      Z G dc dde{          Z G de dfe{          Z G dg dhe{          Z G di dje          Z G dk dle          Z G dm dn          Z G do dp          Z G dq drezee          Z G ds dte{          Z G du dveze          Z G dw dxe          Z G dy dze{          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dequeOrderedDict)	dataclassfield)	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is_parent_pathPerMachineDefaultableMesonBugExceptionEnvironmentVariablespickle_loadlazy_property)	OptionKey)	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Doctest)
SubProject)StaticLinker)ExecutableSerialisationFileModeFileOrString)ModuleState)BaseNode)CustomTargetCustomTargetIndexGeneratedList)SharedLibraryStaticLibraryrA   rB   )BuildTargetrA   rB   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__     P/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mesonbuild/build.pyrJ   rJ   :   s?         ((((((((++++++rW   rJ   c_pchcpp_pchc                    h | ]}| d S )_argsrV   ).0langs     rX   	<setcomp>r_   C   s    <<<dd>>><<<rW   >   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android_exe_type>   versionrust_abi	soversionr   darwin_versionsr   r   >   picprelinkr   
main_classjava_resourcesrv   #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)rv   r   _install_tags      rX   _process_install_tagr   y   sD      #v+	[		Q		"[0"rW   maxsizestrc                    d| j         | j        g}| j        |                    d| j        z              |                    d           d                    |          S )Nz@rpath/..dylib )prefixnamer   appendjoin)ldr   s     rX   #get_target_macos_dylib_install_namer      sU    ry"'*D	|C",&'''KK774==rW   c                      e Zd ZdS )InvalidArgumentsN)rR   rS   rT   rV   rW   rX   r   r      s        DrW   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'nodeTrK   explicitN)rR   rS   rT   rU   r   rV   rW   rX   r   r      s;             HrW   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]ro   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     rX   set_install_subdirzHeaders.set_install_subdir   s    $rW   c                    | j         S r   r   r   s    rX   get_install_subdirzHeaders.get_install_subdir       ""rW   c                    | j         S r   ro   r   s    rX   get_sourceszHeaders.get_sources   
    |rW   c                    | j         S r   r   r   s    rX   get_custom_install_dirzHeaders.get_custom_install_dir       &&rW   c                    | j         S r   r   r   s    rX   get_custom_install_modezHeaders.get_custom_install_mode       ''rW   )r   r   r   r   r   r   r   r   r   r   )
rR   rS   rT   rU   r   r   r   r   r   r   rV   rW   rX   r   r      s         ####''''####OOO(,O,,,,
% % % %# # # #   ' ' ' '( ( ( ( ( (rW   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   ro   r   r   r   r   r   r   localer   c                    | j         S r   r   r   s    rX   r   zMan.get_custom_install_dir   r   rW   c                    | j         S r   r   r   s    rX   r   zMan.get_custom_install_mode   r   rW   T.List['File']c                    | j         S r   r   r   s    rX   r   zMan.get_sources   r   rW   Nr   r   )r   r   )rR   rS   rT   rU   r   r   r   rV   rW   rX   r   r      s         ''''####OOO' ' ' '( ( ( (     rW   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   ry   r   Nr   rv   )rR   rS   rT   rU   rv   rV   rW   rX   r   r      sA         IIIOOO#'K''''''rW   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_subdirru   install_dir_namer   ry   zT.Tuple[T.Set[str], T.Set[str]]excluderK   strip_directoryr   Tfrom_source_dirNr   rv   r   r   )rR   rS   rT   rU   r   rv   r   rV   rW   rX   r   r      s         ,,,,OOO O    #'K''''(,O,,,,,,rW   r   c                  H    e Zd ZU ded<   ded<   ded<   ded<   dd
ZddZdS )DepManifestr   r   T.List[str]licensezT.List[T.Tuple[str, File]]license_filesr   r   T.List[T.Tuple[str, str]]c           	     D   g }| j         D ]\  }}t          j        j        d t	          j        t          j                            |j                            j        D              }|	                    |t          j                            |j
        |          f           |S )Nc              3  &   K   | ]}|d k    |V  dS )z..NrV   )r]   xs     rX   	<genexpr>z.DepManifest.license_mapping.<locals>.<genexpr>   s.      "p"pfgkofofo1fofofofo"p"prW   )r   osr   r   pathlibPurePathnormpathfnamepartsr   r   )r   ret	ifilenamer   r   s        rX   license_mappingzDepManifest.license_mapping   s    #1 	F 	FOItGL"p"pg.>rw?O?OPTPZ?[?[.\.\.b"p"p"pqEJJ	27<<U#C#CDEEEE
rW   &T.Dict[str, T.Union[str, T.List[str]]]c                Z    | j         | j        d |                                 D             dS )Nc                    g | ]
}|d          S )r
   rV   r]   ls     rX   
<listcomp>z'DepManifest.to_json.<locals>.<listcomp>   s    CCCqadCCCrW   )r   r   r   )r   r   r   r   s    rX   to_jsonzDepManifest.to_json   s8    ||CCD,@,@,B,BCCC
 
 	
rW   N)r   r   )r   r   )rR   rS   rT   rU   r   r   rV   rW   rX   r   r      sh         LLL----OOO   
 
 
 
 
 
rW   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.
    r2   environment.Environmentc                N   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 | _(        t                      | _)        d S )Nzname of master projectr   )*r   r   project_nameproject_versionr2   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   r2   s     rX   __init__zBuild.__init__   s   '404&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#&55	 	rW   c                    t                      }| j                                        D ]\  }}t          |t                    r|||<    |S r   )r   r  items
isinstancerF   )r   build_targetsr   ts       rX   get_build_targetszBuild.get_build_targets$  sO    #|))++ 	( 	(GD!![)) (&'d#rW   c                    t                      }| j                                        D ]\  }}t          |t                    r|||<    |S r   )r   r  r)  r*  rA   )r   custom_targetsr   r,  s       rX   get_custom_targetszBuild.get_custom_targets+  sO    $|))++ 	) 	)GD!!\** )'(t$rW   r   c                
   t          | j                  }| j                                        D ]T\  }}t	          |t
          t          t          t          f          r|	                                |j        |<   J||j        |<   U|S r   )
r   r2   __dict__r)  r*  listdictr  r   copyr   otherkvs       rX   r5  z
Build.copy2  sy    d&''M'')) 	& 	&DAq!dD#{;<< &$%FFHHq!!$%q!!rW   r7  r   c                X    |j                                         D ]\  }}|| j         |<   d S r   )r2  r)  r6  s       rX   mergezBuild.merge;  s<    N((** 	! 	!DAq DM!	! 	!rW   compilerr5   c                    | j         |j                 8|                                r&t          | j        |          | j         |j        <   d S d S d S r   )r  for_machineneeds_static_linkerr-   r2   )r   r<  s     rX   ensure_static_linkerzBuild.ensure_static_linker?  sV    h23;@\@\@^@^;7KDL\^f7g7gDx3444 <;;;rW   c                    | j         d         S )Nr   )r  r   s    rX   get_projectzBuild.get_projectC  s    }R  rW   c                    | j         S r   )r  r   s    rX   get_subproject_dirzBuild.get_subproject_dirF  r   rW   8'T.OrderedDict[str, T.Union[CustomTarget, BuildTarget]]'c                    | j         S r   )r  r   s    rX   get_targetszBuild.get_targetsI  r   rW   T.List['Test']c                    | j         S r   )r  r   s    rX   	get_testszBuild.get_testsL  
    zrW   c                    | j         S r   )r  r   s    rX   get_benchmarkszBuild.get_benchmarksO  
    rW   T.List['Headers']c                    | j         S r   )r  r   s    rX   get_headerszBuild.get_headersR  r   rW   T.List['Man']c                    | j         S r   )r  r   s    rX   get_manzBuild.get_manU  	    xrW   T.List['Data']c                    | j         S r   )r  r   s    rX   get_datazBuild.get_dataX  
    yrW   T.List['SymlinkData']c                    | j         S r   )r  r   s    rX   get_symlinkszBuild.get_symlinks[  
    }rW   T.List['EmptyDir']c                    | j         S r   )r  r   s    rX   get_emptydirzBuild.get_emptydir^  r]  rW   T.List['InstallDir']c                    | j         S r   )r  r   s    rX   get_install_subdirszBuild.get_install_subdirsa        rW   
'Compiler'r>  'MachineChoice'r   c                l    | j         |         }|                    |                                g           S r   )r	  getget_languager   r<  r>  ds       rX   get_global_argszBuild.get_global_argsd  s/    [)uuX**,,b111rW   projectr   c                    | j         |         }|                    |          }|sg S |                    |                                g           S r   )r  rh  ri  )r   r<  rm  r>  rk  argss         rX   get_project_argszBuild.get_project_argsh  sK    {+uuW~~ 	Ixx--//444rW   c                l    | j         |         }|                    |                                g           S r   )r
  rh  ri  rj  s       rX   get_global_link_argszBuild.get_global_link_argso  s/    !+.uuX**,,b111rW   c                    | j         |         }|                    |          }|sg S |                    |                                g           S r   )r  rh  ri  )r   r<  rm  r>  rk  rp   s         rX   get_project_link_argszBuild.get_project_link_argss  sK    #K0EE'NN	 	I}}X2244b999rW   N)r2   r  )r   r   )r7  r   r   r   )r<  r5   r   r   )r   rE  )r   rH  )r   rO  )r   rR  )r   rV  )r   rZ  )r   r^  )r   ra  )r<  re  r>  rf  r   r   )r<  re  rm  r   r>  rf  r   r   )rR   rS   rT   __doc__r'  r-  r0  r5  r;  r@  rB  rD  rG  rJ  rM  rQ  rT  rX  r\  r`  rc  rl  rp  rr  rt  rV   rW   rX   r   r      s        + + + +Z       ! ! ! !h h h h! ! !# # #                        ! ! ! !2 2 2 25 5 5 52 2 2 2: : : : : :rW   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   incdirsrK   	is_systemdefault_factoryextra_build_dirsr   c                \    d}|                     | j        j        | j        | j                  S )Nz
<{} {}/{}>)format	__class__rR   rx  ry  r   rs     rX   __repr__zIncludeDirs.__repr__  s&    xx/dlKKKrW   c                    | j         S r   )rx  r   s    rX   
get_curdirzIncludeDirs.get_curdir  
    {rW   c                    | j         S r   )ry  r   s    rX   get_incdirszIncludeDirs.get_incdirs  r   rW   c                    | j         S r   )r}  r   s    rX   get_extra_build_dirsz IncludeDirs.get_extra_build_dirs  s    $$rW   	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)
        )ry  r   r   r   r   rx  )r   r  r  strlistidirs        rX   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rW   Nr   r   r   r   )r  r   r  r   r   r   )rR   rS   rT   ru  rU   r   r3  r}  r  r  r  r  r  rV   rW   rX   rw  rw  |  s          BAKKKOOO %*E$$?$?$?????L L L L      % % % %     rW   rw  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ed d            Zd!dZd"dZdS )#rG   zI
    Holds a list of sources for which the objects must be extracted
    z'BuildTarget'targetr{  r   srclistT.List['GeneratedTypes']genlist0T.List[T.Union[str, 'File', 'ExtractedObjects']]objlistTrK   	recursiveFpchr   r   c                f    d}|                     | j        j        | j        j        | j                  S )Nz<{0} {1!r}: {2}>)r  r  rR   r  r   r  r  s     rX   r  zExtractedObjects.__repr__  s)    xx/1A4<PPPrW   ro   T.Sequence['FileOrString']generated_sourcesT.Sequence['GeneratedTypes']T.List['FileOrString']c                    t          |           } |D ].}|                                D ]}|                     |           /d | D             S )Nc                0    g | ]}t          |          |S rV   )r(   )r]   ss     rX   r   z0ExtractedObjects.get_sources.<locals>.<listcomp>  s#    333aill3333rW   )r3  get_outputsr   )ro   r  gensrcr  s       rX   r   zExtractedObjects.get_sources  sk     w--' 	" 	"F'')) " " q!!!!	" 4373333rW   T.List[FileOrString]*T.Dict['Compiler', T.List['FileOrString']]c                    |                      ||          }t          | j        j                                        |          S r   )r   r   r  	compilersvalues)r   ro   r  sources_s       rX   classify_all_sourcesz%ExtractedObjects.classify_all_sources  s9    ##G->??%dk&;&B&B&D&DhOOOrW   r   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  ro   	generatedr  r  r)  r  r   )r   cmpsrcsextracted_cmpsrcscompsrcss        rX   check_unity_compatiblez'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rW   Nr  )ro   r  r  r  r   r  )ro   r  r  r  r   r  r   r   )rR   rS   rT   ru  rU   r   r3  r  r  r  r  r  r  staticmethodr   r  r  rV   rW   rX   rG   rG     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rW   )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   r3  rV   rW   rX   <lambda>zStructuredSources.<lambda>  s    D 1 1 rW   r{  zYT.DefaultDict[str, T.List[T.Union[File, CustomTarget, CustomTargetIndex, GeneratedList]]]ro   r7  r   c                    | j                                         }|j                                         D ] \  }}||                             |           !t	          |          S r   )ro   r5  r)  extendr  )r   r7  ro   r8  r9  s        rX   __add__zStructuredSources.__add__  s_    ,##%%M'')) 	! 	!DAqAJa     )))rW   rK   c                *    t          | j                  S r   )rK   ro   r   s    rX   __bool__zStructuredSources.__bool__  s    DL!!!rW   =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    rX   
first_filezStructuredSources.first_file  s    
 |B""rW   ET.List[T.Union[File, CustomTarget, CustomTargetIndex, GeneratedList]]c                    t          t          j                            | j                                                            S r   )r3  	itertoolschainfrom_iterablero   r  r   s    rX   as_listzStructuredSources.as_list  s.    IO11$,2E2E2G2GHHIIIrW   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)ro   r  r*  r   is_built)r   filesfs      rX   
needs_copyzStructuredSources.needs_copy  sq     \((** 	  	 E    a&&  z $#ttt$  444  urW   N)r7  r  r   r  r   rK   )r   r  )r   r  )rR   rS   rT   ru  r   ro   rU   r  r  r  r  r  rV   rW   rX   r  r    s           join11j3 j3 j3G 3 3 3 3* * * *" " " "# # # #J J J J     rW   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<   e	j
        d8d            Ze	j        d8d            Zd9dZd:dZd:dZd:dZd:dZd;dZd<d Zd=d"Zd8d#Zd8d$Zd8d%Zed>d'            Zed?d)            Zed8d*            Zd8d+Zd@d.ZdAd0Z edBd2            Z!dCd3Z"dDd5Z#dCd6Z$d7S )ETargetr   r   r   z'SubProject'r   rK   r~   r   r>  r  r2   Frm   build_always_staler{  r   rt   r   c                    d S r   rV   r   s    rX   typenamezTarget.typename      rW   c                    d S r   rV   r   s    rX   type_suffixzTarget.type_suffix  r  rW   r   c                    t          | j                  r1t          j        t	          j        d| j         d                     d S d S )Nz                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   r   warningtextwrapdedentr   s    rX   __post_init__zTarget.__post_init__  sc    	"" 	1L */*/ */ */ 0 0 1 1 1 1 1	1 	1rW   r7  objectc                    t          |t                    st          S |                                 |                                k     S r   r*  r  NotImplementedget_idr   r7  s     rX   __lt__zTarget.__lt__&  5    %(( 	"!!{{}}u||~~--rW   c                    t          |t                    st          S |                                 |                                k    S r   r  r  s     rX   __le__zTarget.__le__+  5    %(( 	"!!{{}}..rW   c                    t          |t                    st          S |                                 |                                k    S r   r  r  s     rX   __gt__zTarget.__gt__0  r  rW   c                    t          |t                    st          S |                                 |                                k    S r   r  r  s     rX   __ge__zTarget.__ge__5  r  rW   /T.Union[T.Tuple[str, str], T.Tuple[None, None]]c                    t           r   NotImplementedErrorr   s    rX   get_default_install_dirzTarget.get_default_install_dir:      !!rW   $T.List[T.Union[str, Literal[False]]]c                    t           r   r  r   s    rX   r   zTarget.get_custom_install_dir=  r  rW   LT.Tuple[T.List[T.Union[str, Literal[False]]], T.List[T.Optional[str]], bool]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     rX   r   z*Target.get_install_dir.<locals>.<listcomp>J  s$     N N NIt!<!< N N NrW   F)r  r   r   )r   default_install_dirdefault_install_dir_nameoutdirsr   install_dir_namess         rX   get_install_dirzTarget.get_install_dir@  s    8<8T8T8V8V558<8S8S8U8U 	Jwqz%888WQZt=S=S "& N Ng N N N!&  00

./!9 :S\\ I)+===rW   c                    | j         S r   r   r   s    rX   get_basenamezTarget.get_basenameW  rY  rW   c                    | j         S r   r   r   s    rX   
get_subdirzTarget.get_subdirZ  r  rW   c                    | j         S r   )r  r   s    rX   get_typenamezTarget.get_typename]  r]  rW   	target_idc                    t          j                    }|                    |                     dd                     |                                d d         S )Nzutf-8replace)encodingerrors   )hashlibsha256updateencode	hexdigest)r  hs     rX   _get_id_hashzTarget._get_id_hash`  sO     N	!!79!EEFFF {{}}RaR  rW   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         rX   construct_id_from_pathzTarget.construct_id_from_pathj  su     LLc**224==	,,,,,K' 	. --f55K%--rW   c                    | j         }t          | dd          r|d| j        z   z  }|                     | j        ||                                           S )Nname_suffix_setFr   )r   r  suffixr  r   r  r   r   s     rX   idz	Target.id}  s\    y4*E22 	&C$+%%D**Kt//113 3 	3rW   c                    | j         S r   )r  r   s    rX   r  zTarget.get_id  s	    wrW   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.rm   FT)r~   r*  rK   r   rh  parse_overridesraw_overridesr   r!  s     rX   process_kwargs_basezTarget.process_kwargs_base  s    ''$*+=$>D!d3T:: T&'RSSS$ 	)Iu)E)E 	) %)D!!11&99rW   r   c                8    | j                             |d           S r   )r%  rh  r  s     rX   get_overridezTarget.get_override  s    !%%dD111rW   T.Dict[str, str]c                   |                      dg           }t          |t                    rt          j        d|          S i }t          |          }|D ]3}d|vrt          d          |                    dd          \  }}|||<   4|S )Nr   zT.Dict[OptionKey, str]=z%Overrides must be of form "key=value"r
   )rh  r*  r4  Tcastr   r   split)r!  optsresult	overridesor8  r9  s          rX   r$  zTarget.parse_overrides  s    zz,b11 dD!! 	:62D999#%!$''	 	 	A!||&'NOOO773??DAqF1IIrW   c                    dS NFrV   r   s    rX   is_linkable_targetzTarget.is_linkable_target      urW   r   c                    g S r   rV   r   s    rX   r  zTarget.get_outputs      	rW   c                    dS r5  rV   r   s    rX   should_installzTarget.should_install  r7  rW   Nr  r  )r7  r  r   rK   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  )%rR   rS   rT   rU   rm   r  r   r3  rt   abcabstractpropertyr  abstractmethodr  r  r  r  r  r  r  r   r  r   r  r  r  r  r  r$   r  r  r'  r)  r$  r6  r  r;  rV   rW   rX   r  r    s         IIIKKK((((G$$$$$ %d ; ; ;K;;;;    	   1 1 1 1. . . .
/ / / /
. . . .
/ / / /
" " " "" " " "> > > >.          ! ! ! \!    \$ 3 3 3 ]3   : : : :2 2 2 2    \"           rW   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d Zd  Zd! Zd" Zdd#Zedd(            Zdd)Zdd+Zd, Zd- Zdd2Zddd5Z ed67          dd9            Z ed67          dd:            Zdd=Z ed67          dd>            Z ed67          dd@            ZddBZddCZ ddEZ!dF Z"ddIZ#ddJZ$ddLZ%ddMZ&ddOZ' ed67          ddQ            Z(dddVZ)dW Z*ddYZ+dd[Z,dd]Z-dd^Z.dd_Z/dd`Z0ddbZ1dc Z2ddeZ3ddfZ4ddiZ5dddkZ6 ed67          ddl            Z7ddmZ8dddpZ9ddrZ:ddtZ;dddxZ<ddzZ=dd{Z>d| Z?dd~Z@ddZAddZBddZCddZDddZEd ZFddZGddZHddZI xZJS )rF   r  ru   )cppcudazT.FrozenSet[T.Tuple[str, str]]_MASK_LANGSr   r   r   r   r:   r>  r   ro   T.List['SourceOutputs']structured_sourcesT.Optional[StructuredSources]rn   T.List[ObjectTypes]r2   r  r  T.Dict[str, 'Compiler']r!  r"  c                   t                                          |||d|||
                    dd                     |	| _        t	                      | _        g | _        || _        g | _        g | _	        |
                    d          | _
        g | _        g | _        g | _        g | _        t                      | _        d| _        d| _        d| _        d | _        d | _        | j        g| _        i | _        |
                    dt1          t2                              | _        g | _        t                      | _        g | _        g | _        |
                    dg           |
                    d	g           |
                    d
g           |
                    dd          d| _        d| _         d| _!        d | _"        t                      | _#        | $                    |           | %                    |           | &                    |
           | '                                | _(        | )                    |
d          }| )                    |
d          }| j        *                                 | j        *                                 | +                    |           | ,                    |           t[          | j        | j        | j        | j        | j        |
.                    dd          g          st_          j0        d| d           | 1                    |
           | 2                                 | 3                                 d S )NTrm   Frm   r|   no_namelanguage_argsr`   rb   rc   ra   )rM   rO   rP   rL   rq   rr   _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)4superr'  rh  all_compilersr   r  rn   rH  external_depsinclude_dirsr|   link_targetslink_whole_targetsdepend_filesrz   r  
added_depsname_prefix_setr  filenamedoctestsdebug_filenameoutputsr  r   r3  
extra_argsro   seen_sourcesr  rt   
d_featuresr   r   both_librpath_dirs_to_removeprocess_sourcelistprocess_objectlistprocess_kwargsprocess_compilersmissing_languagesextract_targets_as_listclearlinkrr   anypopr   r  check_unknown_kwargsvalidate_installcheck_module_linking)r   r   r   r   r>  ro   rH  rn   r2   r  r!  rU  rV  r  s                rX   r'  zBuildTarget.__init__  s!    	vz4k[a[e[efoqv[w[wxxx&5@]],."4>@35#ZZ88.0ce*,%%$$!-1" -/;A::oWbcgWhWh;i;i%'),35)+ZZ	2..!::or::

#6;;

<77	&
 &
 KO25%%!((( 	(((F###!%!7!7!9!9 33FKHH!99&,OO!!!%%'''		,*+++DL$.$,@WY]YpJJ2E::< = = 	QL P P P P Q Q Q 	!!&)))!!#####rW   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_sourcesrH  rk  ro   r  r   r  	uses_rustr   r6  r]  rf   re   rv   rd   r   r   s    rX   	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 1rW   c                v    d}|                     | j        j        |                                 | j                  S N<{0} {1}: {2}>)r  r  rR   r  rZ  r   repr_strs     rX   r  zBuildTarget.__repr__%  s,    #t~6t}UUUrW   c                    | j          S r   r  r   s    rX   __str__zBuildTarget.__str__)  s    )~rW   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   BUILDrm   r2   r#  r   r   r  r   s    rX   rn  zBuildTarget.validate_install,  sf    }222t|2..00 p&'jkkknooooo	 3222rW   c                <    |                      || j                   d S r   )check_unknown_kwargs_intknown_kwargsr&  s     rX   rm  z BuildTarget.check_unknown_kwargs3  s#     	%%fd.?@@@@@rW   c                    g }|D ]"}|dk    r	||vr|                     |           #t          |          dk    rBt          j        d                    | j        d                    |                               d S d S )NrO  r   z-Unknown keyword argument(s) in target {}: {}., )r   r   r   r  r  r   r   )r   r!  r  unknownsr8  s        rX   r  z$BuildTarget.check_unknown_kwargs_int8  s     	# 	#AO##$$"""x==1LHOOPTPY[_[d[dem[n[nooppppp rW   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 rV   )r'   )r]   r3  s     rX   r   z2BuildTarget.process_objectlist.<locals>.<listcomp>K  s#    NNNQ1NqNNNrW   zGenerated file r   z) in the 'objects' kwarg is not an object.zBad object of type z in target r   zSource file z1.3.0)r*  r3  r   r   rG   rn   r   r'   rA   rB   rC   r  r   r  typerR   r   r/   
single_user   )r   rn   deprecated_non_objectsr  non_objectss        rX   rd  zBuildTarget.process_objectlistB  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rW   c                .   |D ]}t          |t                    r>|| j        vr4| j                            |           | j                            |           Ut          |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_  ro   r   addrA   rB   rC   r  r   ro   r  s      rX   rc  zBuildTarget.process_sourcelistU  s      	) 	)A!T"" )D---L''***%))!,,,A.?OPP )%%a(((	) 	)rW   r<  re  r  rK   c                |    d}|d d          D ].}|                      |          r|                    |           d}/|S )NFT)can_compileremove)r<  ro   removedr  s       rX   can_compile_remove_sourcesz&BuildTarget.can_compile_remove_sourcesf  sQ     	 	A##A&& q!!!rW   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    rX   r  z4BuildTarget.process_compilers_late.<locals>.<lambda>  s    *QqT:J:J rW   )keyN)rg  rR  r  r|   r)   rU  rV  r  r  r*  rA   rB   r)  r   sortedrv  )r   r^   
link_langsr,  r   r<  s         rX   process_compilers_latez"BuildTarget.process_compilers_lateo  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rW   r   c                t   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 r|                     d          }|:t?          d| j                  }| j         j!        j"        #                    |          }	 | j        |         | j        |<   n%# tH          $ 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.
        rr  zNo z machine compiler for ccythoncython_languageN)machine)%rk  ro   r  rn   rH  r3  r5  r  r*  r   r   r   r  r'   rS  rG   r  r  languager  rR  r)  r  r,   r   Pathas_posixr>  get_lower_case_namer   r)  r%   r2   r   optstoreget_value_forKeyError)r   rg  ro   r  r9  srcr  r  rk  r3  compsrcsr  r^   r<  r   mvaluer  s                     rX   rf  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~%%
 %%&788E} 14;KLLL(1:HHMM0(,(:5(Au%% 0 0 0!((/////0 ! s   =L L54L5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     rX   r   z/BuildTarget.validate_sources.<locals>.<genexpr>  s*      *]*]d44>+A*]*]*]*]*]*]rW   )csjavar  z*Cannot mix those languages into a target: )r   r  rk  r   keysr   )r   langss   ` rX   rt  zBuildTarget.validate_sources  s    t~""s*]*]*]*]n*]*]*]']']"IIdn113344E"#WPU#W#WXXX #"""rW   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   rz   r   r   from_source_filer2   
source_dirr   hasattrr   r  s      rX   process_link_dependsz BuildTarget.process_link_depends  s     '"" 	= 	=A!T"" 
=!((++++As## =!(()$*:*Et{TUVVX X X XM** =!((++++&<= = =	= 	=rW   r  1T.List[T.Union['FileOrString', 'GeneratedTypes']]is_unityrG   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'          | ||          }	|r|	                                 |	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  ro   r  r*  r   r   r   r.   r  r   r   r   rA   rB   rC   r  r   r  rR   rG   r  )
r   r  r  sources_setgenerated_setobj_srcobj_genr  r  eobjss
             rX   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 w88 	+((***rW   Tr  c                J    t          | | j        | j        | j        |d          S )NT)r  )rG   ro   r  rn   )r   r  s     rX   extract_all_objectszBuildTarget.extract_all_objects)  s,    dlDNDL )t5 5 5 	5rW   Nr   'ImmutableListProtocol[BuildTargetTypes]c                   t                      }t                      }|                    |            |r|                                }||v rt	          |t
                    r|                    |j                   Kt	          |t                    r|                    |           t	          |t                    r4|
                    |j                   |
                    |j                   |t          |          S )a   Get all shared libraries dependencies
        This returns all shared libraries in the entire dependency tree. Those
        are libraries needed at runtime which is different from the set needed
        at link time, see get_dependencies() for that.
        )r   r   
appendleftrl  r*  rB   r  rD   r  rF   
extendleftrU  rV  r3  r   r1  stackr,  s       rX   get_all_link_depszBuildTarget.get_all_link_deps-  s     0:||+077 	7		AF{{!.//   ***!]++ 

1![)) 7  000  !5666  	7 F||rW   c                2   t                      }t                      }|                    | j                   |                    | j                   |r|                                }||v rt          |t                    r|                    |j	                   Kt          |t                    rI|                    |           |                    |j                   |                    |j                   || |vs
J d            t          |          S )aH  Get all targets that have been linked with this one.

        This is useful for cases where we need to analyze these links, such as
        for module information.

        This includes static libraries and static libraries linked with static
        libraries. This differs from :method:`get_all_link_deps` in that it does
        add static libs, and differs from `:method:`get_dependencies`, which
        does not look for targets that are not directly linked, such as those
        that are added with `link_whole`.

        :returns: An immutable list of BuildTargets
        zshould not have self)r   r   r  rU  rV  rl  r*  rB   r  r  rF   r  r3  r  s       rX   get_all_linked_targetsz"BuildTarget.get_all_linked_targetsE  s    0:||+077*+++0111 
	7		AF{{!.//   ***![)) 7

1  000  !5666  
	7 6!!!#9!!!F||rW   r   T.Mapping[str, str]c                ,    |                      |          S r   ) get_transitive_link_deps_mappingr   r   s     rX   get_link_deps_mappingz!BuildTarget.get_link_deps_mappingf  s    44V<<<rW   c                    i }| j         D ]B}|                    |          }|                                }|                    |           |}C|S r   )rU  r  r5  r  )r   r   r1  r  mapping
result_tmps         rX   r  z,BuildTarget.get_transitive_link_deps_mappingi  sY    #%" 	  	 A--f55G Jf%%%FFrW   T.AbstractSet[str]c                    t                      }| j        D ]e}t          |t                    s'|                    |                                           |                    |                                           f|S r   )r   rU  r*  rE   r  r  r  get_link_dep_subdirs)r   r1  r  s      rX   r  z BuildTarget.get_link_dep_subdirst  so    ",,," 	4 	4Aa// +

1<<>>***MM!00223333rW   r  c                8    | j                                         dfS )Nz{libdir})r2   
get_libdirr   s    rX   r  z#BuildTarget.get_default_install_dir}      **,,j88rW   c                    | j         S r   ru   r   s    rX   r   z"BuildTarget.get_custom_install_dir      rW   T.Optional['FileMode']c                    | j         S r   ry   r   s    rX   r   z#BuildTarget.get_custom_install_mode  rd  rW   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  rY   rD  rZ   r   Frf   z.hre   z.vapird   rp   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.
                rz   r   r   ru   ry   rv   rl   z1Argument gui_app can only be used on executables.r}   z7Argument win_subsystem can only be used on executables.rt   z%Tried to add non-existing extra file r   r{   r   zInstall_rpath is not a string.rs   zBuild_rpath is not a string.ri   z"Resource argument is not a string.z#Tried to add non-existing resource rw   z3name_prefix array must be empty to signify default.zname_prefix must be a string.Trx   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  rh   zInvalid rust_dependency_map "z": must be a dictionary.c              3  B   K   | ]}t          |t                     V  d S r   )r*  r   )r]   r9  s     rX   r   z-BuildTarget.process_kwargs.<locals>.<genexpr>  s/      LL!:a%%%LLLLLLrW   z+": must be a dictionary with string values.)?r'  original_kwargsadd_pchr   r*  
Executablerh  r   rf   re   rd   rp   r   r   
startswithr   r  r  r  r  add_include_dirsadd_depsr   rK   ru   ry   r   rv   r   rt   r   r   r   r2   get_source_dirr   r   isfiler   r{   rs   ri   r3  r   rY  r  r  rE   machinesr>  	is_darwin
is_windowsr   _extract_pic_pie
is_androidr   r   r   r  r4  rk  r  rh   )r   r!  r  r   inclistdeplistrt   trialri   r  rw   rx   r  	permittedrh   s                  rX   re  zBuildTarget.process_kwargs  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   rW   argoptionc                R   | 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||                   }nE|| j
        j        j        v r0| j
        j        j                            |j        |j                  }nd	}t          |t                     st#          d
| d| j        d          |S )Nr  rD  z-fz	Use the 'z' kwarg instead of passing '-fz' manually to TrK   F	Argument z to z must be boolean)r^  lowerupperr   r  r   r%   rh  r-  r.  r2   r   r  r  r   r*  rK   r   )r   r!  r  r  	all_flagsr8  vals          rX   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$"+444"+4BB161<XXCCC#t$$ 	W"#Us#U#U	#U#U#UVVV
rW   c                    | j         S r   )rZ  r   s    rX   get_filenamezBuildTarget.get_filename  r]  rW   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
        r\  r   s    rX   get_debug_filenamezBuildTarget.get_debug_filename       ""rW   c                    | j         S r   r]  r   s    rX   r  zBuildTarget.get_outputs  r   rW   r  c                    | j         |         S r   r^  r   r  s     rX   get_extra_argszBuildTarget.get_extra_args"  s    x((rW   OrderedSet[BuildTargetTypes]c                   t                      }t          j        | j        | j                  D ]Y}||vrS|                    |           t          |t                    r)|                    || 	                                           Z|S )N)include_proc_macros)
r   r  r  rU  rV  r  r*  rE   get_dependencies_recurseru  r   r1  r,  s      rX   get_dependencieszBuildTarget.get_dependencies%  s     0:||!2D4KLL 	_ 	_A

1a// _..vT^^M]M].^^^rW   Fr1  include_internalsr  c                \   |o|                                  }| j        D ]l}||v r|s|j        dk    r|s|                                 s|                    |           t	          |t
                    r|                    |||           m| j        D ]}|                    |||           d S )N
proc-macro)is_internalrU  rg   r  r*  rE   r  rV  )r   r1  r  r  r,  s        rX   r  z$BuildTarget.get_dependencies_recurse4  s    
 .D$2B2B2D2D" 	[ 	[AF{{& 1+<+L+L   

1!]++ [**63DFYZZZ( 	W 	WA&&v/@BUVVVV	W 	WrW   c                    | j         S r   r  r   s    rX   get_source_subdirzBuildTarget.get_source_subdirF  r  rW   r   c                    | j         S r   r   r   s    rX   r   zBuildTarget.get_sourcesI  r   rW   r  c                    | j         S r   )rn   r   s    rX   get_objectszBuildTarget.get_objectsL  r   rW   r  c                    | j         S r   )r  r   s    rX   get_generated_sourcesz!BuildTarget.get_generated_sourcesO  
    ~rW   c                    | j         S r   rM  r   s    rX   r;  zBuildTarget.should_installR  r   rW   c                *    t          | j                  S r   )rK   r  r   s    rX   has_pchzBuildTarget.has_pchU  s    DH~~rW   c                8    | j                             |g           S r   )r  rh  r  s     rX   get_pchzBuildTarget.get_pchX  s    x||Hb)))rW   T.List['IncludeDirs']c                    | j         S r   )rT  r   s    rX   get_include_dirszBuildTarget.get_include_dirs[  rd  rW   c                J    t          |          }|D ]}| j        v rt          |t          j                  rw                     |j                    j                             fd|j        D                         	                    |j
        |                                            j                            |j                    j                            |j                    j                            |j                   |                                s|                                rdt          j        dg |                                |                                g g g g g i g g g |j                  } j                            |                                |j                   nt          |t          j                  re| j        vrA j                            |                                |                                                                |j                   nt          |t4                    r t7          d|j         d j         d          t9          |d          r|j        }t9          |d          st9          |d          rt7          d	          t7          d
t=          |          j        d          |j         }dD ],}||v r& j         |                             ||                    - j        !                    |           d S )Nc              3  .   K   | ]}|j         v|V  d S r   )rt   )r]   r  r   s     rX   r   z'BuildTarget.add_deps.<locals>.<genexpr>g  s0      '`'`aatO_F_F_F_F_F_F_'`'`rW   	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()).)rP   rO   )"r   rX  r*  r   InternalDependencyrc  ro   rt   r  r  r   get_include_typern   rU  	librariesrV  whole_librariesget_compile_argsget_link_argsr   rS  r   r  ext_deps
Dependencyr   rF   r   r  r+  r  rR   r`  r  )r   depsr   extpartdep_d_featuresfeatures   `     rX   r  zBuildTarget.add_deps^  si   t}} 5	% 5	%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\^`>AhH H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$$$$k5	% 5	%rW   T.List[dependencies.Dependency]c                    | j         S r   )rS  r   s    rX   get_external_depszBuildTarget.get_external_deps  s    !!rW   c                    dS r5  rV   r   s    rX   r  zBuildTarget.is_internal  r7  rW   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  rB   r   ExternalLibraryr   r  r  r   r6  rE   rm   r  rr   rD   r   r   check_can_link_togetherrU  r   )r   r  r,  msgs       rX   rj  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''''/	( 	(rW   r@  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.rA  rB  rC  rD  T)r*  rA   rB   r6  r   links_dynamicallyrE   rD   r   r   rF  _bundle_static_libraryrm   get_internal_static_librariesrV  r   )r   r  r@  r,  rG  libs         rX   rr   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-----	. 	.rW   c                L    t                      }|                     |           |S r   )r   %get_internal_static_libraries_recurser   r1  s     rX   rK  z)BuildTarget.get_internal_static_libraries  s$    /9||226:::rW   c                   | j         D ]D}|                                r.||vr*|                    |           |                    |           E| j        D ]+}|                                r|                    |           ,d S r   )rU  r  r  rN  rV  r  s      rX   rN  z1BuildTarget.get_internal_static_libraries_recurse  s    " 	@ 	@A}} @1F??

177???( 	@ 	@A}} @77???	@ 	@rW   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.)
ru  rV  r   r*  rA   rB   r   r   rn   r  )r   r,  r@  r  s       rX   rJ  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8rW   BuildTargetTypesc           	        t          |t                    o|                                }|                                 s!|rt	          d|j        d| j                  | j        |j        urt|r|j        dk    rid|j         d|j         d| j         d| j         d	}| 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 a z library ("z
") with a z	 target ""z' This is not possible in a cross build.z This will fail in cross build.)r*  rF   uses_rust_abiru  r   r   r>  rg   r2   r#  r   r  )r   r,  links_with_rust_abirG  s       rX   rF  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wAMwwafwwPTP`wwkoktwwwC..00 F&s-V'VWWWS#DDEEEEE 10QrQrrW   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   r2   r  r   r  )r   r  rX  r  s       rX   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$rW   ro  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 rV   )rw  r  r  r  )r]   r   rz  s     rX   r   z0BuildTarget.add_include_dirs.<locals>.<listcomp>)  sD    rrrij;q||~~q}}	1KaKaKcKcddrrrrW   )r*  rw  r   r   rT  )r   ro  r]  idsarz  s        @rX   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 rW   T.List[T.Tuple[str, str, str]]c                    g S r   rV   r   s    rX   get_aliaseszBuildTarget.get_aliases,  r9  rW   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
        )rS  r  r   r  r  rU  rV  r*  rA   rB   r  )r   r  r   link_targetr  s        rX   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***+ rW   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   )r|   rR  r)   r  r  r   r   )r   r  r   	prelinkers       rX   get_prelinkerzBuildTarget.get_prelinkerK  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 "rk  )r|   rR  language_stdlib_only_link_flagsr2   r   r  r>  ri  r)   r  r   r   get_used_stdlib_argsr  AssertionError)r   r  rR  	dep_langsr   linkerstdlib_argss          rX   $get_clink_dynamic_linker_and_stdlibsz0BuildTarget.get_clink_dynamic_linker_and_stdlibs[  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r|   c                F   | j         j        j        | j                 }t	          | j                                      |                                           }g }|D ]F}||k    r>||f| j        vr3|                    ||         	                    | j                              G|S r   )
r2   r   r  r>  r  unionri  rF  r  rp  )r   r|   rR  	all_langsru  dls         rX   rq  z BuildTarget.get_used_stdlib_args  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rW   c                    d| j         v S )Nrq  r  r   s    rX   ru  zBuildTarget.uses_rust  s    ''rW   c                <    |                                  o| j        dv S )N>   rlibdylibr  )ru  rg   r   s    rX   rV  zBuildTarget.uses_rust_abi  s     ~~[D$8<[$[[rW   c                    d| j         v S )Nfortranr  r   s    rX   uses_fortranzBuildTarget.uses_fortran  s    DN**rW   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.
        rq  >   lld-linkrj  xilinkoptlink)ru  rR  rv  get_linker_id)r   r<  _s      rX   get_using_msvczBuildTarget.get_using_msvc  sX    & >> 	F)&1HHCCEEKHaaH22448aaarW   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 OSXTzj, which is incorrect.
             This will be an error in meson 2.0, 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)rU  r*  SharedModuleforce_sonamer2   r  r>  r  r   r   r  r   deprecation)r   rh  s     rX   ro  z BuildTarget.check_module_linking  sJ     , 	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ozo&s &s ITHX	&s &s &s t t t 04K,%	4 	4rW   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)rh  r*  r   r   r   isabsr   from_absolute_filer   r  r2   r  r   rA   rB   from_built_filer  r  r   r  )r   r!  r   s      rX   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 	!!$'''''rW   4T.Dict[str, T.Union[LibTypes, T.Sequence[LibTypes]]]r  $T.Literal['link_with', 'link_whole']T.List[LibTypes]c                   | j         j        j                            t	          d                    }|dk    r/t          | t                    rd}nt          | t                    rd}|dk    r| j        n| j	        }g }t          |                    |g                     |z   D ]\}t          |t          t          f          r)|                    |                    |                     G|                    |           ]|S )Ndefault_both_librariesautostaticsharedrq   )r2   r   r  r  r%   r*  rE   rD   rU  rV  r   rh  r  BothLibrariesr   )r   r!  r  bl_type	self_libslib_listrL  s          rX   rh  z#BuildTarget.extract_targets_as_list  s    "+4BB9MeCfCfggf$.. #"D-00 #";>+;M;Md&7&7SWSj	6::c2..//); 	% 	%C#677 % 0 01111$$$$rW   lib_typeT.Literal['static', 'shared']LibTypesc                    | S zBase case used by BothLibrariesrV   r   r  s     rX   rh  zBuildTarget.get      rW   )r   r   r   r   r   r:   r>  r   ro   rG  rH  rI  rn   rJ  r2   r  r  rK  r!  r"  r  )ro   rG  r   r   )r<  re  ro   r  r   rK   r  )r  r  r  rK   r   rG   T)r  rK   r   rG   r   r  r   r   r   r  r   r  r<  r=  r   r  )r!  r"  r  r   r  r   r   rK   r  r   )r  r   r   r   r   r  )TF)r1  r  r  rK   r  rK   r   r   r   )r   r  )r   r  r  )r   r%  )r   r:  )r  r>  r   r   F)r  r>  r@  rK   r   r   r1  r  r   r   )r,  rQ  r@  rK   r   r   )r,  rS  r   r   )r  r   rX  r   r   r   r   )ro  r\  r]  r   r   r   r   rd  )r   rn  )r|   r   r   r   r>  )r!  r  r  r  r   r  )r  r  r   r  )KrR   rS   rT   known_build_target_kwargsr  rU   	frozensetrF  r'  rv  r  r}  rn  rm  r  rd  rc  r  r  r  rf  rt  r  r  r  r	   r  r  r  r  r  r  r   r   re  r  r  r  r  r  r  r  r  r   r  r  r;  r"  r$  r'  r  r<  r  rj  rr   rK  rN  rJ  rF  r  r  rf  ri  rm  rv  rq  ru  rV  r  r  ro  r  rh  rh  __classcell__r  s   @rX   rF   rF     s-        ,L5555 3<)= 3 3K    
O$ O$ O$ O$ O$ O$b1 1 1 1&V V V  p p pA A A
q q qC C C&) ) ) )"    \$ $ $ $LZ! Z! Z! Z!xY Y Y
= = =.   85 5 5 5 5 Yt   . Yt   @= = = = Yt    Yt   9 9 9 9       ! ! ! !y7 y7 y7v   &   # # # #   ) ) ) ) Yt   W W W W W$                 * * * *! ! ! !7% 7% 7%r" " " "   ( ( ( (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( ( ( (,   $       rW   rF   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     rX   r'  zFileInTargetPrivateDir.__init__      


rW   r   c                    | j         S r   r  r   s    rX   r}  zFileInTargetPrivateDir.__str__  rK  rW   N)r   r   r  )rR   rS   rT   ru  r'  r}  rV   rW   rX   r  r    sF                 rW   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     rX   r'  z$FileMaybeInTargetPrivateDir.__init__  r  rW   r   r   c                    | j         j        S r   )r  r   r   s    rX   r   z!FileMaybeInTargetPrivateDir.fname  s    zrW   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      rX   r  z+FileMaybeInTargetPrivateDir.rel_to_builddir  sJ    dj"899 	F7<< 2DJ4DEEEz)),777rW   srcdirr  c                    t          | j        t                    rt          d          | j                            ||          S )NzUnreachable code)r*  r  r  RuntimeErrorabsolute_path)r   r  r  s      rX   r  z)FileMaybeInTargetPrivateDir.absolute_path  s>    dj"899 	31222z''999rW   c                    | j         S r   r  r   s    rX   r}  z#FileMaybeInTargetPrivateDir.__str__  rK  rW   N)r  r  r  )r  r   r  r   r   r   )r  r   r  r   r   r   )
rR   rS   rT   ru  r'  propertyr   r  r  r}  rV   rW   rX   r  r  
  s        ;;          X 8 8 8 8
: : : :
     rW   r  c                  Z    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	 	 	 d(d)d#Z	dS )*	GeneratorNF)depfilecapturedependsr   exe/T.Union['Executable', programs.ExternalProgram]	argumentsr   outputr  r   r  rK   r  MT.Optional[T.List[T.Union[BuildTarget, 'CustomTarget', 'CustomTargetIndex']]]r   r   c               l    || _         || _        || _        |pg | _        || _        || _        || _        d S r   )r  r  r  r  arglistr]  r   )r   r  r  r  r  r  r  r   s           rX   r'  zGenerator.__init__"  s?     ZaZgeg 			rW   r   c                P    d}|                     | j        j        | j                  S )Nz
<{0}: {1}>)r  r  rR   r  rz  s     rX   r  zGenerator.__repr__3  s"    t~6AAArW   c                    | j         S r   )r  r   s    rX   get_exezGenerator.get_exe7  rU  rW   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     rX   r   z/Generator.get_base_outnames.<locals>.<listcomp>=  s8    kkkYZ<22::=)TTkkkrW   )r   r   r  splitextr]  )r   r  basesr  r  s      @@rX   get_base_outnameszGenerator.get_base_outnames:  sX    G$$V,,	7##I..q1kkkkk^b^jkkkrW   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       rX   get_dep_outnamezGenerator.get_dep_outname@  sq    <"#opppG$$V,,	7##I..q1|##L(;;CCMS\]]]rW   c                    t           j                            |          t           j                                      d         fd| j        D             S )Nr   c                d    g | ],}|                     d                                d          -S r  r  r  s     rX   r   z)Generator.get_arglist.<locals>.<listcomp>J  s8    jjjXY		,1199-SSjjjrW   )r   r   r  r  r  )r   r  r  r  s     @@rX   get_arglistzGenerator.get_arglistG  sT    G$$V,,	7##I..q1jjjjj]a]ijjjjrW   r  TT.Iterable[T.Union[str, File, 'CustomTarget', 'CustomTargetIndex', 'GeneratedList']]state%T.Union['Interpreter', 'ModuleState']preserve_path_fromr^  T.Optional[T.List[str]]env T.Optional[EnvironmentVariables]'GeneratedList'c                D  
 t          | |j        |||ng ||nt                                }|D ]m
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 ]r}|rI|                    |j        j        |j        j                  }	t#          ||	          st          d          t%          |          }|                    ||           so|S )N)r^  r  c                ^    g | ])}t          j                                        |          *S rV   )r   r  r  )r]   r  es     rX   r   z+Generator.process_files.<locals>.<listcomp>[  s.    WWW!d*1<<>>1==WWWrW   zZgenerator.process: 'preserve_path_from' is not allowed if one input is a 'generated_list'.c                ,    g | ]}t          |          S rV   )r  r]   r  s     rX   r   z+Generator.process_files.<locals>.<listcomp>`  s!    IIIA,Q//IIIrW   zmgenerator.process: When using preserve_path_from, all input files must be in a subdirectory of the given dir.)rC   r   r"   r*  rA   rB   r  r  r  r   r   r   r  r2   r  r  	build_dirr   r  add_file)r   r  r  r  r^  r  r  fsr  abs_fr  s             @rX   process_fileszGenerator.process_filesL  s   
 L%/%;zz,@,B,BD D D  	* 	*A!l,=>?? ""1%%%WWWWq}}WWW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)*<eDD `.  0_  `  `  `/225))))* rW   )r  r  r  r   r  r   r  r   r  rK   r  r  r   r   r  )r   r  )r  r   r   r   )NNN)r  r  r  r  r  r   r^  r  r  r  r   r  )
rR   rS   rT   r'  r  r  r  r  r  r  rV   rW   rX   r  r  !  s         -1!&jn(     "B B B B      ^ ^ ^ ^k k k k =A<@>B	! ! ! ! ! ! !rW   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 ))rC   z The output of generator.process.r  	generatorr   r   r   r  r   r^  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_dependsrW  r^  r  r"   r*  r   ExternalProgramfoundr   get_pathr   r   r  r   r   r  )r   r   s     rX   r  zGeneratedList.__post_init__{  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rW   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  r2   r  r  r   r   r  r  relpathr[  r   r   )	r   r  r  r  r1  in_absrelpath_segmentofs	            rX   add_preserved_path_segmentz(GeneratedList.add_preserved_path_segment  s     %%e&7&BEDUD_``w}}T455555goofd&=>>ws++ 	: 	:BMM"',,|R889999rW   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       rX   r  zGeneratedList.add_file  sx    w'''>33GMBB" 	Q66w%PPHH$'GrW   #T.List[FileMaybeInTargetPrivateDir]c                    | j         S r   )r  r   s    rX   
get_inputszGeneratedList.get_inputs  rN  rW   c                    | j         S r   )r   r   s    rX   r  zGeneratedList.get_outputs  r  rW   rZ  c                    | j         |         S r   )r  )r   rZ  s     rX   get_outputs_forzGeneratedList.get_outputs_for  s    {8$$rW   'Generator'c                    | j         S r   )r  r   s    rX   get_generatorzGeneratedList.get_generator  r  rW   c                    | j         S r   r  r   s    rX   r  zGeneratedList.get_extra_args  rN  rW   c                    | j         S r   r  r   s    rX   r  zGeneratedList.get_subdir  r  rW   Nr  )r  r  r  r   r  r  r   r   )r  r  r  r  r   r   )r   r  r  )rZ  r  r   r   )r   r  r  )rR   rS   rT   ru  rU   r  r  r  r  r  r  r  r  r  rV   rW   rX   rC   rC   p  s         +*KKK''''))))H H H H0   ( ( ( (          % % % %           rW   rC   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   r:   r>  r   ro   rG  rH  rI  rn   rJ  r2   r  r  rK  c                   t          d          }d|
vr0||j        j        v r"|j        j                            |          |
d<   t	                                          |||||||||	|

  
         |
                    d          pd| _        |
                    d          |
                    d          dv sJ |
                    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   >   r  applicationr   Fz3"export_dynamic" keyword argument must be a booleanr   z="export_dynamic" keyword argument must be a boolean or string)r%   r   r  r  rQ  r'  rh  r}   r   r*  rK   r   r   r   r  is_linkwithablewas_returned_by_find_programr   r  )r   r   r   r   r>  ro   rH  rn   r2   r  r!  r  r  s               rX   r'  zExecutable.__init__  s|      3+*>*G#G#G'09GGLLF5Mvz;I[]d$i	9 	9 	9#ZZ88EIzz,--5DV9W9W[x9x9x9x9x$jj)95AA$-t44 	Z"#XYYYjj**$+c4::'>?? 	d"#bccc#2,1)04&&v.....rW   r   r   c                L	   t                                                       | j        j        | j                 }t          | d          sd| _        t          | d          s|                                s|                                s	d| j	        v r	d| _
        nu|j                            d          s|j        dk    r	d| _
        nGd	| 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| _
        nId	| j	        v r;| j	        d	                                                             d          r	d| _
        nd	| j	        v r!| j	        d	                                         dv s*d| j	        v r)| j	        d                                         dv rd| _
        nd	| j	        v r!| j	        d	                                         dv s*d| j	        v r)| j	        d                                         dv rd| _
        nMd	| j	        v r+| j	        d	                                         dk    rd| _
        n|                                | _
        | j        | _        | j        r| j        | j        z   | _        | 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| _        |                                oad| j	        v p'|                                 p|                                 o0| j        j        j                            t;          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  armclangrD  axfccrxabsxc16elf>   tic2000c6000out>   mwccarmmwcceppcneftaskingr   r   z.exe.librL  .arM   r  .pdb)rQ  rv  r2   r  r>  r  r   r  	is_cygwinr  r  r`  r  r  get_exe_suffixr   rZ  r]  import_filenamer\  r   r*  r   r   r  ru  r   r  r  r%   r  )r   r  implib_basenamecreate_debug_filer   r  s        rX   rv  zExecutable.post_init  s   "+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,HLd,d,d4>))dnU.C.J.J.L.LPh.h.h#''DN3,?,F,F,H,HLc,c,c4>))dnU.C.J.J.L.LPg.g.g#''DN3,?,F,F,H,HI,U,U#%4466	; 	8 K$-7DM; 	/MMS4;..MM-Q  $"  	E"i&0O$+s++ ."&+!!## Ew'8'8':': E&&(( E.=+C+C+CD((+D+D+D+DD(    U'T4>>+;+;Tt?R?R?T?TU  )2@@7ASASTT	 	  	0
 9DtXu--66dk))"&-D	0 	0rW   c                    t                                          |           |                    d          pd| _        | j        dk    rt	          d          d S )Nrg   binz7Invalid rust_crate_type: must be "bin" for executables.)rQ  re  rh  rg   r   )r   r!  r  s     rX   re  zExecutable.process_kwargs%  sZ    v&&&%zz*;<<E5(("#\]]] )(rW   r  c                8    | j                                         dfS )Nz{bindir})r2   
get_bindirr   s    rX   r  z"Executable.get_default_install_dir,  r  rW   c                    | j         S )z,Human friendly description of the executabler  r   s    rX   descriptionzExecutable.description/  s
    yrW   c                    dS )Nz@exerV   r   s    rX   r  zExecutable.type_suffix3      vrW   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    rX   get_import_filenamezExecutable.get_import_filename6       ##rW   c                    | j         S r  r  r   s    rX   r  zExecutable.get_debug_filename>  r  rW   c                    | j         S r   )r!  r   s    rX   r6  zExecutable.is_linkable_targetF  s    ##rW   'ImmutableListProtocol[str]'c                    | j         S )zProvides compatibility with ExternalProgram.

        Since you can override ExternalProgram instances with Executables.
        r	  r   s    rX   get_commandzExecutable.get_commandI  s    
 |rW   c                V    t           j                            | j        | j                  S ),Provides compatibility with ExternalProgram.)r   r   r   r   rZ  r   s    rX   r  zExecutable.get_pathP  s    w||DK777rW   rK   c                    dS )rP  TrV   r   s    rX   r  zExecutable.foundT  s    trW   r   r   r   r   r   r:   r>  r   ro   rG  rH  rI  rn   rJ  r2   r  r  rK  r  r<  r   )r   rL  r  r  )rR   rS   rT   known_exe_kwargsr  r  r'  rv  re  r  rB  r  rH  r  r6  rN  r  r  r  r  s   @rX   r  r    s0       #LH /  /  /  /  /  /DD0 D0 D0 D0 D0 D0L^ ^ ^ ^ ^9 9 9 9    $ $ $ $# # # #$ $ $   8 8 8 8       rW   r  c                  t     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d/d#Zd0d1d)Z xZS )2rE   zstatic libraryr   r   r   r   r:   r>  r   ro   rG  rH  rI  rn   rJ  r2   r  r  rK  c                    t          j        d|
                    dd                    | _        t	                                          |||||||||	|

  
         d S )NrK   r   F)r-  r.  rh  r   rQ  r'  r   r   r   r   r>  ro   rH  rn   r2   r  r!  r  s              rX   r'  zStaticLibrary.__init__^  sc     vffjjE&B&BCCvz;I[]d$i	9 	9 	9 	9 	9rW   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    rM j        d
         }t          j	        dg g |j
        g g g g g i g g g d          } j                            |           t           d          sd _        t           d          s                                 r& j        dk    rd _        n j        d	k    rd _        nd _        d j        v rÉ j        d                                         dk    r j        st%          d j         j                  }	  j        j                             |          }n4# t0          $ r'  j        j        j                            |          }Y nw xY wt7          |t8                    s
J d            |r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     rX   r   z*StaticLibrary.post_init.<locals>.<genexpr>t  s)      5^5^a49n5^5^5^5^5^5^rW   - 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	staticlibrq  r*  _rust_native_static_libsr   rL  r  rc  r  r4  b_ltozfor mypymar   r   )rQ  rv  r  r   ru  rg   rk  r   r   r.  native_static_libsrS  r   r  r   r  r  r   r%   r   r>  r2   r   get_option_for_targetr  r  r  r*  rK   rZ  r]  )r   rustcrk  r  r9  r  s   `    rX   rv  zStaticLibrary.post_initn  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BPRTV4NP P "))!,,, tX&& 	 DKtX&& 	+~~ +'611"(DKK)[88"%DK!$.((T^C-@-G-G-I-IY-V-V_c_k-V#GT_d>NOOCR ,5KKDRUVV# R R R ,5>LLSQQR%a..::
::: +&*di/#5C-Qs   % G .G76G7r   r  c                    i S r   rV   r  s     rX   r  z#StaticLibrary.get_link_deps_mapping  r9  rW   r  c                8    | j                                         dfS )Nz{libdir_static})r2   get_static_lib_dirr   s    rX   r  z%StaticLibrary.get_default_install_dir      22446GGGrW   c                    dS )Nz@starV   r   s    rX   r  zStaticLibrary.type_suffix  rD  rW   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   rg   4rust_abi and rust_crate_type are mutually exclusive.rL  r}  >   r}  r`  Crate type z< invalid for static libraries; must be "rlib" or "staticlib"r  r`  )rQ  re  rh  r   rg   r   r!  r   rg   r  s       rX   re  zStaticLibrary.process_kwargs  s    v&&&::j)) **%677 
	N _&']^^^%'''-$$$ $999'6$$$&  (E_  (E  (E  (E  F  F  F2:c//;;vD   rW   c                    dS NTrV   r   s    rX   r6  z StaticLibrary.is_linkable_target      trW   rK   c                    | j          S r   rM  r   s    rX   r  zStaticLibrary.is_internal  s    <rW   shared_libraryrD   c                P    t          j         |          | _        d | j        _        d S r   r5  ra  )r   rt  s     rX   
set_sharedzStaticLibrary.set_shared  #    	.11!%rW   Fr  r  r  r  c                ^    | }dk    r	| j         p| }|rfd| j        D             |_        |S )Nr  c                <    g | ]}|                     d           S r  rh  r]   r,  r  s     rX   r   z%StaticLibrary.get.<locals>.<listcomp>  '    "T"T"TQ1554#8#8"T"T"TrW   ra  rU  r   r  r  r1  s    `  rX   rh  zStaticLibrary.get  L    x]*dF 	U"T"T"T"T$BS"T"T"TFrW   rR  r  r  r<  r  )rt  rD   r   r   r  r  r  r  rK   r   r  )rR   rS   rT   known_stlib_kwargsr  r  r'  rv  r  r  r  re  r6  r  rw  rh  r  r  s   @rX   rE   rE   Y  s       %LH9 9 9 9 9 9 7( 7( 7( 7( 7( 7(r   H H H H  N N N N N"         & & & &        rW   rE   c                       e Zd ZeZdZdZd0 fdZd1 fdZd2dZ	d3dZ
d Z fdZd4d Zd4d!Zd5d#Zd$ Zd% Zd6d(Zd7d8d/Z xZS )9rD   zshared libraryTr   r   r   r   r:   r>  r   ro   rG  rH  rI  rn   rJ  r2   r  r  rK  c                    d | _         d | _        d | _        d | _        d | _        d | _        d| _        t                                          |||||||||	|

  
         d S r5  )	r   	ltversionr   r   r:  r\  shared_library_onlyrQ  r'  rV  s              rX   r'  zSharedLibrary.__init__  sx     +/*.>B"#"#( vz;I[]d$i	9 	9 	9 	9 	9rW   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  rY  s     rX   r   z*SharedLibrary.post_init.<locals>.<genexpr>  s)      7`7`1TY7`7`7`7`7`7`rW   rZ  r]  r^  r_  r   r  {0.prefix}{0.name}.{0.suffix})rQ  rv  ru  rg   rk  r   r   r  r   r  basic_filename_tpldetermine_filenames)r   r  s   `rX   rv  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  """""rW   r   r  c                X   i }|                      |          }t          |           }||vrj|                                 }|                                 \  }}}t          j                            ||d         |          }|                    ||i           |                    |           |S r  )r  r   r  r  r   r   r   r  )	r   r   r1  mappingsoldr   r  r  news	            rX   r  z#SharedLibrary.get_link_deps_mapping	  s    #%88@@1$77h%%''E 0022MGQ',,vwqz599CMM3*%%%rW   r  c                8    | j                                         dfS )Nz{libdir_shared})r2   get_shared_lib_dirr   s    rX   r  z%SharedLibrary.get_default_install_dir	  rj  rW   c                B   d}d}d}| j         | _        d}d| j        v rd}d}d| _        d}n| j        j        | j                                                 rd}|                                 r6d}d}| j        j        j	        
                    t          d	                    }nN|                                 r6d}d
}| j        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<   |r4t0          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  dllr  Tz{0.prefix}{0.name}.dll.librM   z{0.prefix}{0.name}.librL  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   r7  )r  filename_tplr  r2   r  r>  r  ru  r   r  r  r%   r  r   r8  r   r  r  r  r  r  rZ  r:  r]  r   r   r  r\  )r   r   r  r<  import_filename_tplimport_prefixs         rX   r  z!SharedLibrary.determine_filenames	  s    ! 3" 4>!!FF ?D $ &t'78CCEE A	DF~~ A&B#$($4$=$F$T$TU^_fUgUg$h$h!!$$&& A&>#$($4$=$F$T$TU^_fUgUg$h$h!! &@#~ 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rW   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   rg   rm  rL  r~  >   r~  r  r  rn  zH invalid for shared libraries; must be "dylib", "cdylib" or "proc-macro"r  r  )rQ  re  r2   r  r>  r  r-  r.  rh  r  r   r/  r   r  r   rg   ro  s       rX   re  zSharedLibrary.process_kwargs	  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   rW   r   c                    | j         S rF  rG  r   s    rX   rH  z!SharedLibrary.get_import_filename	  rI  rW   c                    | j         S r  r  r   s    rX   r  z SharedLibrary.get_debug_filename	  r  rW   rd  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
        )r  r~  r  r  r   r   runtimers  )
r  r   r  r  r  r  rv   r   rZ  r  )r   aliases	alias_tplltversion_filenametags        rX   rf  zSharedLibrary.get_aliases	  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rW   c                    dS )Nz@sharV   r   s    rX   r  zSharedLibrary.type_suffix	  rD  rW   c                    dS rq  rV   r   s    rX   r6  z SharedLibrary.is_linkable_target	  rr  rW   static_libraryrE   c                P    t          j         |          | _        d | j        _        d S r   rv  )r   r  s     rX   
set_staticzSharedLibrary.set_static	  rx  rW   Fr  r  r  rK   r  c                ^    | }dk    r	| j         p| }|rfd| j        D             |_        |S )Nr  c                <    g | ]}|                     d           S r  r{  r|  s     rX   r   z%SharedLibrary.get.<locals>.<listcomp>	  r}  rW   r~  r  s    `  rX   rh  zSharedLibrary.get	  r  rW   rR  r  r  r<  r   r  )r  rE   r   r   r  r  )rR   rS   rT   known_shlib_kwargsr  r  aix_so_archiver'  rv  r  r  r  re  rH  r  rf  r  r6  r  rh  r  r  s   @rX   rD   rD     sU       %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$ $ $ $# # # #   @    & & & &        rW   rD   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   r:   r>  r   ro   rG  rH  rI  rn   rJ  r2   r  r  rK  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   rQ  r'  r  rV  s              rX   r'  zSharedModule.__init__	  s}      !UVVV&   !WXXXvz;+Wk9f	V 	V 	V "rW   r   r  c                8    | j                                         dfS )Nz{moduledir_shared})r2   get_shared_module_dirr   s    rX   r  z$SharedModule.get_default_install_dir
  s    55779MMMrW   rR  r<  )
rR   rS   rT   known_shmod_kwargsr  r  r  r'  r  r  r  s   @rX   r  r  	  sj        %LH N" " " " " ",N N N N N N N NrW   r  c                  6    e Zd Zdd	ZddZddZddZddZdS )r  r  rD   r  rE   preferred_libraryLiteral['shared', 'static']r   r   c                R    || _         || _        || _        | j        j        | _        d S r   )_preferred_libraryr  r  r   )r   r  r  r  s       rX   r'  zBothLibraries.__init__

  s(    "3+0rW   r   c                \    dt          | j                   dt          | j                   dS )Nz<BothLibraries: static=z	; shared=>)reprr  r  r   s    rX   r  zBothLibraries.__repr__
  s/    Ydk):):YYT$+EVEVYYYYrW   r  r  %T.Union[StaticLibrary, SharedLibrary]c                ^    |dk    r| j         S |dk    r| j        S |                                 S )Nr  r  )r  r  get_default_objectr  s     rX   rh  zBothLibraries.get
  s:    x;x;&&(((rW   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    rX   r  z BothLibraries.get_default_object
  sK    "h..;$00; {t?V { { {|||rW   c                N    |                                                                  S r   )r  r  r   s    rX   r  zBothLibraries.get_id!
  s     &&((//111rW   N)r  rD   r  rE   r  r  r   r   r  )r  r  r   r  )r   r  )rR   rS   rT   r'  r  rh  r  r  rV   rW   rX   r  r  	
  s        1 1 1 1Z Z Z Z) ) ) )} } } }2 2 2 2 2 2rW   r  c                  6    e Zd ZU ded<   ded<   ded<   ddZdS )CommandBaser   rW  z,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   rW  r   r  r  r   r  r   r   r  r  rN  rF   rA   r   rB   r.   r  r   r  flatten_commandr  r  r  r3  )r   r  	final_cmdr  r   s        rX   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rW   N)r  r  r   r  )rR   rS   rT   rU   r  rV   rW   rX   r  r  $
  sK         >>>>OOO     rW   r  c                  B    e Zd ZdZdZddd
ZddZddZddZd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   Tr1  r  r  rK   r   r   c                    d S r   rV   )r   r1  r  s      rX   r  z)CustomTargetBase.get_dependencies_recurseT
      rW   c                    t                      S r   r   r   s    rX   rK  z.CustomTargetBase.get_internal_static_librariesW
      ||rW   c                    d S r   rV   rO  s     rX   rN  z6CustomTargetBase.get_internal_static_libraries_recurseZ
  r  rW   r  c                    g S r   rV   r   s    rX   r  z'CustomTargetBase.get_all_linked_targets]
  r9  rW   Fr  r  r  r  c                    | S r  rV   )r   r  r  s      rX   rh  zCustomTargetBase.get`
  r  rW   Nr  )r1  r  r  rK   r   r   r  r  r  r  r  )
rR   rS   rT   ru  rg   r  rK  rN  r  rh  rV   rW   rX   r  r  J
  s          O                   rW   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 )jrA   customFNz#Generating {} with a custom command)r  r~   r  r  rW  r  r  r  feedrm   ru   ry   rv   absolute_pathsbackendrB  r   r   r   r   r   r2   r  commandYT.Sequence[T.Union[str, BuildTargetTypes, GeneratedList, programs.ExternalProgram, File]]ro   kT.Sequence[T.Union[str, File, BuildTargetTypes, ExtractedObjects, GeneratedList, programs.ExternalProgram]]r]  r   r  rK   r~   r   r  r  rW  $T.Optional[T.Sequence[FileOrString]]r  3T.Optional[T.Sequence[T.Union[str, SourceOutputs]]]r  r  r  r  rm   ru   0T.Optional[T.List[T.Union[str, Literal[False]]]]ry   T.Optional[FileMode]rv   r   r  r  T.Optional['Backend']rB  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   )rQ  r'  r   HOSTr3  ro   r   r   get_sources_string_namesr]  r~   r  r  rW  r   r  r  r  r"   r  r  r  ru   ry   r   r   rv   r   rB  r  )r   r   r   r   r2   r  ro   r]  r  r~   r  r  rW  r  r  r  r  rm   ru   ry   rv   r  r  rB  r  s                           rX   r'  zCustomTarget.__init__h
  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	& -rW   r   r  c                    dS )N)NNrV   r   s    rX   r  z$CustomTarget.get_default_install_dir
      zrW   c                v    d}|                     | j        j        |                                 | j                  S rx  r  r  rR   r  r  rz  s     rX   r  zCustomTarget.__repr__
  s,    #t~6t|TTTrW   #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  ro   r*  rB   r   r  r   r  )r   r6  r  s      rX   get_target_dependenciesz$CustomTarget.get_target_dependencies
  s    46D%&&&D&''' 	 	A!.// AH%%%%8#;<< ArW   +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*  rF   r  rA   r   get_transitive_build_target_deps)r   bdepsr6  rk  s       rX   r  z-CustomTarget.get_transitive_build_target_deps
  s     >AUU++-- 	C 	CA![)) C		!A|,, CQ??AABBBrW   c                    | j         S r   r   r   s    rX   r  zCustomTarget.get_dependencies
  rd  rW   c                    | j         S r   rM  r   s    rX   r;  zCustomTarget.should_install
  r   rW   r  c                    | j         S r   r  r   s    rX   r   z#CustomTarget.get_custom_install_dir
  r  rW   r  c                    | j         S r   r  r   s    rX   r   z$CustomTarget.get_custom_install_mode
  rd  rW   c                    | j         S r   r	  r   s    rX   r  zCustomTarget.get_outputs
  r   rW   c                    | j         d         S r  r	  r   s    rX   r  zCustomTarget.get_filename
  s    |ArW   cT.List[T.Union[str, File, BuildTarget, GeneratedTypes, ExtractedObjects, programs.ExternalProgram]]c                    | j         S r   r   r   s    rX   r   zCustomTarget.get_sources
  r   rW   T.List[GeneratedList]c                r    g }| j         D ],}t          |t                    r|                    |           -|S r   )ro   r*  rC   r   )r   genlistsr  s      rX   get_generated_listsz CustomTarget.get_generated_lists
  sB    *, 	# 	#A!]++ #"""rW   c                *    |                                  S r   )r  r   s    rX   r  z"CustomTarget.get_generated_sources
  s    '')))rW   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       rX   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<rW   r  c                b    |                     d          rdS t          j        d|          rdS dS )N)r6  z.dllr5  z.sor   Tz\.so(\.\d+)*$F)endswithresearch)r   r  s     rX   is_linkable_outputzCustomTarget.is_linkable_output
  s;    ??BCC 	49%v.. 	4urW   c                v    t          | j                  dk    rdS |                     | j        d                   S )Nr
   Fr   )r   r]  r  r   s    rX   r6  zCustomTarget.is_linkable_target
  s6    t|!!5&&t|A777rW   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      r6  r5  )r   r   r  r]  r   sufs     rX   rI  zCustomTarget.links_dynamically
  s/     gt|A//3.((rW   r   r  c                    i S r   rV   r  s     rX   r  z"CustomTarget.get_link_deps_mapping  r9  rW   r  c                    t                      S r   r  r   s    rX   r  z!CustomTarget.get_link_dep_subdirs  r  rW   c                    g S r   rV   r   s    rX   r  zCustomTarget.get_all_link_deps  r9  rW   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   r]  rB   r  r   s    rX   r  zCustomTarget.is_internal  s@     t|!!5 t|A77CCEEErW   (T.List[T.Union[str, 'ExtractedObjects']]c                *    |                                  S r   )r  r   s    rX   r  z CustomTarget.extract_all_objects  s    !!!rW   c                    dS )Nz@cusrV   r   s    rX   r  zCustomTarget.type_suffix  rD  rW   indexr   'CustomTargetIndex'c                8    t          | | j        |                   S r   )rB   r]  r   r  s     rX   __getitem__zCustomTarget.__getitem__  s     t|E':;;;rW   c                    t           r   r  )r   r  r  s      rX   __setitem__zCustomTarget.__setitem__"  r  rW   c                    t           r   r  r  s     rX   __delitem__zCustomTarget.__delitem__%  r  rW   c              #  B   K   | j         D ]}t          | |          V  d S r   )r]  rB   )r   r  s     rX   __iter__zCustomTarget.__iter__(  s:       	- 	-A#D!,,,,,,	- 	-rW   c                *    t          | j                  S r   )r   r]  r   s    rX   __len__zCustomTarget.__len__,  s    4<   rW   ).r   r   r   r   r   r   r2   r  r  r  ro   r  r]  r   r  rK   r~   r   r  rK   r  rK   rW  r  r  r  r  r   r  r  r  rK   rm   rK   ru   r  ry   r  rv   r   r  rK   r  r  rB  r   r<  )r   r  )r   r  r  r=  r  r  r  )r   r  )r   r  )r  r   r   rK   r  r  r   r
  )r  r   r   r  )r   r   )"rR   rS   rT   r  r'  r  r  r  r  r  r;  r   r   r  r  r   r  r  r  r  r6  rI  r  r  r  r  r  r  r  r  r  r  r  r  r  s   @rX   rA   rA   d
  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" " " "  < < < <" " "" " "- - -! ! ! ! ! ! ! !rW   rA   c                  @     e Zd ZdZdZd! fdZd"dZ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   r2   r  ro   rG  output_templr<  r5   r  r4   compile_argsr   r   rN   r   r:  r  =T.List[T.Union[BuildTarget, CustomTarget, CustomTargetIndex]]c                   |                                 |i}d|j        |	i|
|d}t                                          ||||j        |d g |||
  
         || _        || _        || _        g | _        i | _	        t          |pg           | _        | j        D ]}|                     |           | j        D ]W}|                                D ]@}|                    | ||          }|                     t#          j        |                     AXd S )NF)r~   rO  r   r   )ri  r  rQ  r'  r>  rZ  r<  r  r]  sources_mapr3  r  ro   _add_outputr  r  get_target_generated_dirr   from_built_relative)r   r   r   r   r2   ro   r  r<  r  r  r   r   r  r  r!  r  r  r  rel_srcr  s                      rX   r'  zCompileTarget.__init__7  sO    **,,h7	 %&/>#6(	
 
 	vz83G $KF	L 	L 	L (.0GMr** 	  	 AQn 	D 	DF'')) D D!::4KK  !9'!B!BCCCCD	D 	DrW   r   c                    dS )Nz@compilerV   r   s    rX   r  zCompileTarget.type_suffixZ  r  rW   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  r]  r   r"  )r   r  r  r  r3  s        rX   r#  zCompileTarget._add_output]  s    G$$QW--	7##I..q1%%lH==EEmU^__ArW   r   c                f    g }| j         D ]%|fd                                D             z  }&|S )Nc                <    g | ]}t          d j        |          S r  )r   r   )r]   r3  r   s     rX   r   z7CompileTarget.get_generated_headers.<locals>.<listcomp>g  s'    QQQ!Dsz155QQQrW   )r  r  )r   gen_headersr   s     @rX   get_generated_headersz#CompileTarget.get_generated_headersd  sL    $&< 	R 	RCQQQQs?P?PQQQQKKrW   )r   r   r   r   r   r   r2   r  ro   rG  r  r   r<  r5   r  r4   r  r   r   rN   r   r:  r  r   r  )r  r   r   r   r   )
rR   rS   rT   ru  r  r'  r  r#  r,  r  r  s   @rX   r  r  /  s         
 H!D !D !D !D !D !DF                 rW   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[T.Union[Target, CustomTargetIndex]]r   r   r2   r  r  r  default_envrK   c	                    t                                          |||dt          j        |           || _        g | _        |                     |          | _        d| _        || _	        || _
        d S r5  )rQ  r'  r   r  r   rW  r  r  r  r  r2  )
r   r   r  r   r   r   r2   r  r2  r  s
            rX   r'  zRunTarget.__init__n  sl     	vz5-:M{[[[(++G44#&rW   r   c                    d}|                     | j        j        |                                 | j        d                   S )Nry  r   r  rz  s     rX   r  zRunTarget.__repr__  s1    #t~6t|TUWWWrW   r   c                    | j         S r   r   r   s    rX   r  zRunTarget.get_dependencies  rd  rW   T.List[GeneratedTypes]c                    g S r   rV   r   s    rX   r  zRunTarget.get_generated_sources  r9  rW   r   c                    g S r   rV   r   s    rX   r   zRunTarget.get_sources  r9  rW   c                    dS r5  rV   r   s    rX   r;  zRunTarget.should_install  r7  rW   c                    | j         S r   r  r   s    rX   r  zRunTarget.get_filename  rY  rW   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   r3  r  r   s    rX   r  zRunTarget.get_outputs  sM    di%% 	eI;	4(( 	e9cdddrW   c                    dS )Nz@runrV   r   s    rX   r  zRunTarget.type_suffix  rD  rW   rq  )r   r   r  r0  r   r1  r   r   r   r   r2   r  r  r  r2  rK   r  )r   r   )r   r6  r   r  r  )rR   rS   rT   r  r'  r  r  r  r   r;  r  r  r  r  r  s   @rX   r.  r.  j  s        H :>%)' ' ' ' ' ' '"X X X X! ! ! !            e e e e       rW   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   r2   r  c                T    t                                          |g ||||           d S r   )rQ  r'  )r   r   r   r   r   r2   r  s         rX   r'  zAliasTarget.__init__  s+    r<[QQQQQrW   c                j    d}|                     | j        j        |                                           S )Nz	<{0} {1}>)r  r  rR   r  rz  s     rX   r  zAliasTarget.__repr__  s(    t~6FFFrW   )
r   r   r   r@  r   r   r   r   r2   r  )rR   rS   rT   r  r'  r  r  r  s   @rX   r>  r>    s^        HR R R R R RG G G G G G GrW   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   ro   T.List[SourceOutputs]rH  T.Optional['StructuredSources']r2   r  r  rK  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   )rQ  r'  ro   r  r   rU  r*  rD  rH  r   rZ  r]  r^  	java_argsrh  r   r   )r   r   r   r   r>  ro   rH  rn   r2   r  r!  r  r,  r  s                rX   r'  zJar.__init__  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^=_=_rW   c                    | j         S r   )r   r   s    rX   get_main_classzJar.get_main_class  rN  rW   c                    dS )Nz@jarrV   r   s    rX   r  zJar.type_suffix  rD  rW   c                    | j         S r   )rI  r   s    rX   get_java_argszJar.get_java_args  r  rW   r   rI  c                    | j         S r   )r   r   s    rX   get_java_resourceszJar.get_java_resources  r   rW   c                    d S r   rV   r   s    rX   rn  zJar.validate_install  r  rW   c                    dS rq  rV   r   s    rX   r6  zJar.is_linkable_target  rr  rW   c                    d | j         D             }t          j                            |          }|r!dt          j                            |          gS g S )Nc                    g | ]F}t           j                            |                                |                                          GS rV   )r   r   r   r  r  r   s     rX   r   z*Jar.get_classpath_args.<locals>.<listcomp>  s:    ^^^qBGLL1A1ABB^^^rW   z-cp)rU  r   pathsepr   )r   cp_paths	cp_strings      rX   get_classpath_argszJar.get_classpath_args  sQ    ^^DL]^^^JOOH--	 	62:??84455	rW   r  c                8    | j                                         dfS )Nz{jardir})r2   get_jar_dirr   s    rX   r  zJar.get_default_install_dir  s    ++--z99rW   )r   r   r   r   r   r   r>  r   ro   rF  rH  rG  r2   r  r  rK  )r   rI  r<  )rR   rS   rT   known_jar_kwargsr  r  r'  rK  r  rN  rP  rn  r6  rX  r  r  r  s   @rX   rD  rD    s        #LH` ` ` ` ` `(      # # # #      : : : : : : : :rW   rD  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 )+rB   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    rX   r  zCustomTargetIndex.__post_init__  s    ;2rW   c                0    | j         j         d| j         dS )N[])r  r   r  r   s    rX   r   zCustomTargetIndex.name  s     +"33T[3333rW   c                B    d                     | j        | j                  S )Nz<CustomTargetIndex: {!r}[{}]>)r  r  r  r   s    rX   r  zCustomTargetIndex.__repr__  s    .55dk4;OOOrW   r   c                    | j         gS r   r  r   s    rX   r  zCustomTargetIndex.get_outputs  s    }rW   c                4    | j                                         S r   )r  r  r   s    rX   r  zCustomTargetIndex.get_subdir  s    {%%'''rW   c                    | j         S r   rc  r   s    rX   r  zCustomTargetIndex.get_filename  r  rW   c                4    | j                                         S r   )r  r  r   s    rX   r  zCustomTargetIndex.get_id   s    {!!###rW   c                4    | j                                         S r   )r  r  r   s    rX   r  z#CustomTargetIndex.get_all_link_deps  s    {,,...rW   r   r  c                6    | j                             |          S r   )r  r  r  s     rX   r  z'CustomTargetIndex.get_link_deps_mapping  s    {00888rW   r  c                4    | j                                         S r   )r  r  r   s    rX   r  z&CustomTargetIndex.get_link_dep_subdirs	  s    {//111rW   rK   c                @    | j                             | j                  S r   )r  r  r  r   s    rX   r6  z$CustomTargetIndex.is_linkable_target  s    {--dk:::rW   c                ^    t           j                            | j                  d         }|dvS )r  r  r  )r   r   r  r  r  s     rX   rI  z#CustomTargetIndex.links_dynamically  s+     gt{++B/.((rW   c                4    | j                                         S r   )r  r;  r   s    rX   r;  z CustomTargetIndex.should_install  s    {))+++rW   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  r;  r  s     rX   r  zCustomTargetIndex.is_internal  s?     gt{++B/n$BT-@-@-B-B)BBrW   r
  c                4    | j                                         S r   )r  r  r   s    rX   r  z%CustomTargetIndex.extract_all_objects#  s    {..000rW   r  c                4    | j                                         S r   )r  r   r   s    rX   r   z(CustomTargetIndex.get_custom_install_dir&  s    {11333rW   Nr  r  r  r  r  r  r  r=  )rR   rS   rT   ru  r  rU   r  r  r   r  r  r  r  r  r  r  r  r6  rI  r;  r  r  r   rV   rW   rX   rB   rB     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 4rW   rB   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]   r8  r9  s      rX   
<dictcomp>z.ConfigurationData.__init__.<locals>.<dictcomp>0  s5    \\\TQQZ5))84y\\\rW   F)rQ  r'  r)  r  used)r   rr  r  s     rX   r'  zConfigurationData.__init__*  sV     	`nv\\^EYEYE[E[\\\\tv 				rW   r   r   c                *    t          | j                  S r   )r  r  r   s    rX   r  zConfigurationData.__repr__3      DK   rW   r  rK   c                    || j         v S r   r  )r   r  s     rX   __contains__zConfigurationData.__contains__6  s    ##rW   c                *    t          | j                  S r   )rK   r  r   s    rX   r  zConfigurationData.__bool__9  rz  rW   r   1T.Tuple[T.Union[str, int, bool], T.Optional[str]]c                    | j         |         S r   r|  r  s     rX   rh  zConfigurationData.get<  s    {4  rW   T.Iterator[str]c                4    | j                                         S r   )r  r  r   s    rX   r  zConfigurationData.keys?  s    {!!!rW   r   )rr  rs  r  )r  r   r   rK   r  )r   r   r   r  )r   r  )
rR   rS   rT   r'  r  r}  r  rh  r  r  r  s   @rX   rq  rq  )  s                      ! ! ! !$ $ $ $! ! ! !! ! ! !" " " " " " " "rW   rq  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   ro   r   ru   r   r   ry   r   Nr   renamer   rv   	data_typer   r   r   r   c                D    | j         d | j        D             | _         d S d S )Nc                V    g | ]&}t           j                            |j                  'S rV   )r   r   r  r   r  s     rX   r   z&Data.__post_init__.<locals>.<listcomp>R  s*    KKK27++AG44KKKrW   )r  ro   r   s    rX   r  zData.__post_init__P  s-    ;KKdlKKKDKKK rW   r  )	rR   rS   rT   rU   r  rv   r  r   r  rV   rW   rX   r  r  D  s         OOOF#'K''''I(,O,,,,L L L L L LrW   r  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   ru   r   Nr   rv   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    rX   r  zSymlinkData.__post_init__\  sZ    9((3333" $LDI $L $L $L M M M 43rW   r  )rR   rS   rT   rU   rv   r  rV   rW   rX   r  r  T  sh         KKKIIIOOO#'K''''M M M M M MrW   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_wrapperrK   gdbr   timeout_multiplierr"   r  exclude_suitesNrQ   rV   rW   rX   r  r  a  sK         IIIrW   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   rF   rA   rB   rC   r  rG   determine_ext_objsr   r   rr  )ro   r  namesr  s       rX   r  r  i  s    
 E 
@ 
@a 		@LLOOOOK7H-XYY 	@Q]]__$EE+,, 	@W//222EE4   	@LL!!!! !>!>!>???LrW   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   loadr2   FileNotFoundErrorr   )r  rZ  bs      rX   r  r  |  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objrZ  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)r2   r   openpickledump)r  rZ  cdatar  s       rX   saver    s    O$E#CO)(D!! 	 QKQ	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  $)   5 ((((s.   A% A A% AA% AA% %A3)rv   r   r   r   r   r   r  )r  r   r   r   )r  r   rZ  r   r   r   )
__future__r   collectionsr   r   r   dataclassesr   r   	functoolsr	   r?  r5  r  r  r   r   r  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$   optionsr%   r  r&   r'   r(   r)   r*   r+   r,   r-   interpreterbaser.   r/   TYPE_CHECKINGtyping_extensionsr0   r1   r2   _typingr3   backend.backendsr4   r5   interpreter.interpreterr6   r7   interpreter.interpreterobjectsr8   r9   r:   linkers.linkersr;   r<   r=   r>   r&  r?   mparserr@   UnionrH   r  rS  r   ObjectTypesrJ   
pch_kwargslang_arg_kwargsvala_kwargsrust_kwargs	cs_kwargsbuildtarget_kwargsr  rS  r  r  r  r[  r   r   r   r   r   r   r   r   r   r   rw  rG   r  ABCMetar  rF   r  r  r  rC   r  rE   rD   r  r  r  r  rA   r  r.  r>  rD  rB   rq  r  r  r  r  r  r  rV   rW   rX   <module>r     s   # " " " " " 7 7 7 7 7 7 7 7 7 7 ( ( ( ( ( ( ( (       



           				  				                                                                                                    ; : : : : : : :? ,44444444......))))))######CCCCCCCC========++++++------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)$	   :   	
   -/x/x/xx .1z1z1zz .2BJ1OO .1O1O1OO #|5E&FF 	 	 	 	 4   	 	 	 	 	~ 	 	 	 e       
 e( ( ( ( (n ( ( (6 e    .   " e( ( ( ( (~ ( ( ( e- - - - - - - - e
 
 
 
 
 
 
 
,H: H: H: H: H: H: H: H:T e$ $ $ $ $. $ $ $L e/T /T /T /T /T~ /T /T /Td e5!!!- - - - - - - "!-` ei i i i i^s{ i i i iVJ J J J J& J J JX"	 	 	 	 	 	 	 	       .L L L L L L L L^ eD D D D DN D D DN^ ^ ^ ^ ^ ^ ^ ^Bx x x x xK x x xtQ Q Q Q QK Q Q QjN N N N N= N N NB2 2 2 2 2% 2 2 26$ $ $ $ $ $ $ $L       4I! I! I! I! I!6+[ I! I! I!V9 9 9 9 9K 9 9 9v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) ) ) ) ) )rW   