o
    Wªod  ã                   @  sz  d dl mZ d dlmZmZ d dlmZmZmZ d dl	m
Z
 d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZmZmZ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/m0Z0m1Z1 ddl2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8 ddl9m:Z:m;Z; ej<rd dl=m>Z> ddl?m@Z@ ddlAmBZBmCZC ddl2mDZD ddlEmFZFmGZGmHZH ddl9mIZI ddlJmKZK ddlmLZLmMZM ddlNmOZO ddlPmQZQ ddlRmSZS ejTd ZUejTd ZVejTd ZWejTeXdddf ZYd d!hZZd"d#„ e6D ƒZ[e[h d$£O Z[h d%£Z\d&hZ]d'd(hZ^h d)£Z_e_e[B eZB e\B e]B e^B Z`e`h d*£B Zae`h d+£B Zbe`d,hB Zce`d-d.hB Zdead/d0hB Zedˆd7d8„Zfe
dd9d‰d;d<„ƒZgG d=d>„ d>e ƒZhed?d@G dAdB„ dBeƒƒZied?d@G dCdD„ dDeƒƒZjed?d@G dEdF„ dFeƒƒZked?d@G dGdH„ dHeƒƒZled?d@G dIdJ„ dJeƒƒZmed?d@G dKdL„ dLƒƒZnG dMdN„ dNƒZoed?d@G dOdP„ dPeƒƒZped?d@G dQd„ deƒƒZqed?d?dRG dSdT„ dTeƒƒZred?d@G dUdV„ dVeejsdWƒZtG dXdY„ dYetƒZuG dZd[„ d[eƒZved?d@G d\d]„ d]eƒƒZwG d^d_„ d_euƒZxG d`da„ daeuƒZyG dbdc„ dceuƒZzG ddde„ deezƒZ{G dfdg„ dgeƒZ|G dhdi„ diƒZ}G djdk„ dkete}ƒZ~G dldm„ dmeuƒZG dndo„ doete}ƒZ€G dpdq„ dqe€ƒZG drds„ dseuƒZ‚ed?d@G dtdu„ dueƒƒZƒG dvdw„ dweƒZ„ed?d@G dxdy„ dyeƒƒZ…ed?d@G dzd{„ d{eƒƒZ†ed?d@G d|d}„ d}ƒƒZ‡d~d„ ZˆdŠdd‚„Z‰d‹d†d‡„ZŠdS )Œé    )Úannotations)ÚdefaultdictÚOrderedDict)Ú	dataclassÚfieldÚInitVar)Ú	lru_cacheNé   )Úcoredata)Úenvironment©Údependencies)Úmlog)Úprograms)ÚHoldableObjectÚSecondLevelHolderÚFileÚMesonExceptionÚMachineChoiceÚ
PerMachineÚ
OrderedSetÚlistifyÚextract_as_listÚtypeslistifyÚstringlistifyÚclassify_unity_sourcesÚget_filenames_templates_dictÚsubstitute_valuesÚhas_path_sepÚ	OptionKeyÚPerMachineDefaultableÚOptionOverrideProxyÚMesonBugExceptionÚEnvironmentVariablesÚpickle_load)Ú	is_objectÚclink_langsÚ
sort_clinkÚall_languagesÚis_known_suffixÚdetect_static_linker)Ú
FeatureNewÚFeatureDeprecated)ÚLiteral)ÚImmutableListProtocol)ÚBackendÚExecutableSerialisation)ÚCompiler)ÚTestÚSourceOutputsÚInterpreter)Ú
SubProject)ÚStaticLinker)ÚFileModeÚFileOrString)ÚModuleState)ÚBaseNode)ÚWrapMode)ÚCustomTargetÚCustomTargetIndexÚGeneratedList)ÚSharedLibraryÚStaticLibraryr<   r=   )ÚBuildTargetr<   r=   r   ÚExtractedObjectsÚGeneratedTypesÚc_pchÚcpp_pchc                 C  s   h | ]}|› d ’qS )Ú_args© ©Ú.0ÚlangrG   rG   úohome/ych/rk3568/buildroot/output/rockchip_rk3568_recovery/host/lib/python3.10/site-packages/mesonbuild/build.pyÚ	<setcomp>D   s    rL   >   Úd_debugÚ
d_unittestÚd_import_dirsÚd_module_versions>   Úvala_headerÚvala_girÚ	vala_vapiÚrust_crate_typeÚ	resourcesZcs_args>   Ú	link_argsÚbuild_rpathÚinstallÚlink_languageÚinstall_rpathÚgui_appÚname_suffixÚ
link_wholer   Ú	link_withÚobjectsÚinstall_dirÚinclude_directoriesÚinstall_modeÚinstall_tagÚlink_dependsÚoverride_optionsÚextra_filesZnativeÚimplicit_include_directoriesÚname_prefixÚgnu_symbol_visibilityÚbuild_by_defaultÚwin_subsystemÚsources>   ÚimplibÚpieÚexport_dynamic>   ÚversionÚvs_module_defsÚ	soversionÚdarwin_versionsrq   ÚpicÚprelinkÚ
main_classÚjava_resourcesrc   ú#T.Optional[T.List[T.Optional[str]]]Únum_outputsÚintÚreturnúT.List[T.Optional[str]]c                 C  s2   | s	d g| }|S t | ƒdkr| | }|S | }|S )Nr	   )Úlen)rc   ry   Z_install_tagrG   rG   rK   Ú_process_install_tagz   s   
üÿr~   ©ÚmaxsizeÚstrc                 C  s<   d| j | jg}| jd ur| d| j ¡ | d¡ d |¡S )Nz@rpath/Ú.ú.dylibÚ )ÚprefixÚnamerr   ÚappendÚjoin)Úldr†   rG   rG   rK   Ú#get_target_macos_dylib_install_name†   s
   


rŠ   c                   @  s   e Zd ZdS )ÚInvalidArgumentsN)Ú__name__Ú
__module__Ú__qualname__rG   rG   rG   rK   r‹   Ž   s    r‹   F)Úeqc                   @  s*   e Zd ZU ded< ded< dZded< dS )	ÚDependencyOverridezdependencies.DependencyÚdepz
'BaseNode'ÚnodeTÚboolÚexplicitN)rŒ   r   rŽ   Ú__annotations__r”   rG   rG   rG   rK   r   ‘   s   
 r   c                   @  sh   e Zd ZU ded< ded< ded< ded< ded	< ddd„Zddd„Zddd„Zddd„Zddd„ZdS )ÚHeadersúT.List[File]rl   úT.Optional[str]Úinstall_subdirÚcustom_install_dirú
'FileMode'Úcustom_install_moder   Ú
subprojectÚsubdirr{   ÚNonec                 C  s
   || _ d S ©N©r™   )Úselfrž   rG   rG   rK   Úset_install_subdir¢   ó   
zHeaders.set_install_subdirc                 C  ó   | j S r    r¡   ©r¢   rG   rG   rK   Úget_install_subdir¥   ó   zHeaders.get_install_subdirc                 C  r¥   r    ©rl   r¦   rG   rG   rK   Úget_sources¨   r¨   zHeaders.get_sourcesc                 C  r¥   r    ©rš   r¦   rG   rG   rK   Úget_custom_install_dir«   r¨   zHeaders.get_custom_install_dirc                 C  r¥   r    ©rœ   r¦   rG   rG   rK   Úget_custom_install_mode®   r¨   zHeaders.get_custom_install_modeN)rž   r   r{   rŸ   ©r{   r˜   ©r{   r—   ©r{   r›   )	rŒ   r   rŽ   r•   r£   r§   rª   r¬   r®   rG   rG   rG   rK   r–   —   s   
 



r–   c                   @  sT   e Zd ZU ded< ded< ded< ded< ded	< ddd„Zddd„Zddd„ZdS )ÚManr—   rl   r˜   rš   r›   rœ   r   r   Úlocaler{   c                 C  r¥   r    r«   r¦   rG   rG   rK   r¬   º   r¨   zMan.get_custom_install_dirc                 C  r¥   r    r­   r¦   rG   rG   rK   r®   ½   r¨   zMan.get_custom_install_modeúT.List['File']c                 C  r¥   r    r©   r¦   rG   rG   rK   rª   À   r¨   zMan.get_sourcesNr¯   r±   ©r{   r´   )rŒ   r   rŽ   r•   r¬   r®   rª   rG   rG   rG   rK   r²   ²   s   
 

r²   c                   @  s2   e Zd ZU ded< ded< ded< dZded< dS )	ÚEmptyDirr   Úpathr›   rb   r   Nr˜   rc   )rŒ   r   rŽ   r•   rc   rG   rG   rG   rK   r¶   Ä   s
   
 r¶   c                   @  sf   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S )Ú
InstallDirr   Zsource_subdirZinstallable_subdirr`   Úinstall_dir_namer›   rb   zT.Tuple[T.Set[str], T.Set[str]]Úexcluder“   Zstrip_directoryr   TÚfrom_source_dirNr˜   rc   )rŒ   r   rŽ   r•   r»   rc   rG   rG   rG   rK   r¸   Ì   s   
 r¸   c                   @  s8   e Zd ZU ded< ded< ded< ded< dd
d„ZdS )ÚDepManifestr   rp   úT.List[str]ÚlicensezT.List[T.Tuple[str, File]]Úlicense_filesr   r{   ú&T.Dict[str, T.Union[str, T.List[str]]]c                 C  s   | j | jdd„ | jD ƒdœS )Nc                 S  s   g | ]}|d    ¡ ‘qS )r	   )Zrelative_name©rI   ÚlrG   rG   rK   Ú
<listcomp>ä   ó    z'DepManifest.to_json.<locals>.<listcomp>©rp   r¾   r¿   rÅ   r¦   rG   rG   rK   Úto_jsonà   s   ýzDepManifest.to_jsonN)r{   rÀ   )rŒ   r   rŽ   r•   rÆ   rG   rG   rG   rK   r¼   Ù   s   
 r¼   c                   @  sÚ   e Zd ZdZdBdd„Zdd„ Zdd	„ ZdCdd„ZdDdd„ZdEdd„Z	dd„ Z
dd„ ZdFdd„ZdGdd„ZdGdd „ZdHd"d#„ZdId%d&„ZdJd(d)„ZdKd+d,„ZdLd.d/„ZdMd1d2„ZdNd7d8„ZdOd;d<„ZdNd=d>„ZdOd?d@„ZdAS )PÚBuildzYA class that holds the status of one build including
    all dependencies and so on.
    r   úenvironment.Environmentc                 C  s  t j| _d| _d | _|| _i | _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!ƒ | _"t# $| %¡ i i ¡| _&g | _'g | _(d S )Nzname of master projectr„   ))r
   rp   Úproject_nameZproject_versionr   Úprojectsr   Útargetsr   Úglobal_argsÚglobal_link_argsÚprojects_argsÚprojects_link_argsÚtestsÚ
benchmarksÚheadersÚmanÚemptydirÚdataÚsymlinksÚstatic_linkerÚsubprojectsÚsubproject_dirÚinstall_scriptsZpostconf_scriptsZdist_scriptsÚinstall_dirsZdep_manifest_nameZdep_manifestZstdlibsZtest_setupsZtest_setup_default_nameZfind_overridesÚsetZsearched_programsr    ÚdefaultÚis_cross_buildZdependency_overridesZdevenvÚmodules)r¢   r   rG   rG   rK   Ú__init__î   sH   
ÿ
zBuild.__init__c                 C  ó0   t ƒ }| j ¡ D ]\}}t|tƒr|||< q|S r    )r   rË   ÚitemsÚ
isinstancerA   )r¢   Zbuild_targetsr†   ÚtrG   rG   rK   Úget_build_targets  ó   
€zBuild.get_build_targetsc                 C  rá   r    )r   rË   râ   rã   r<   )r¢   Zcustom_targetsr†   rä   rG   rG   rK   Úget_custom_targets  ræ   zBuild.get_custom_targetsr{   c                 C  sN   t | jƒ}| j ¡ D ]\}}t|ttttfƒr| 	¡ |j|< q
||j|< q
|S r    )
rÇ   r   Ú__dict__râ   rã   ÚlistÚdictrÜ   r   Úcopy©r¢   ÚotherÚkÚvrG   rG   rK   rë   $  s   
z
Build.copyrí   rŸ   c                 C  s"   |j  ¡ D ]	\}}|| j |< qd S r    )rè   râ   rì   rG   rG   rK   Úmerge-  s   ÿzBuild.mergeÚcompilerr1   c                 C  s8   | j |j d u r| ¡ rt| j|ƒ| j |j< d S d S d S r    )r×   Úfor_machineZneeds_static_linkerr*   r   )r¢   rñ   rG   rG   rK   Úensure_static_linker1  s   ÿzBuild.ensure_static_linkerc                 C  ó
   | j d S )Nr„   )rÊ   r¦   rG   rG   rK   Úget_project5  r¤   zBuild.get_projectc                 C  r¥   r    )rÙ   r¦   rG   rG   rK   Úget_subproject_dir8  r¨   zBuild.get_subproject_dirú8'T.OrderedDict[str, T.Union[CustomTarget, BuildTarget]]'c                 C  r¥   r    )rË   r¦   rG   rG   rK   Úget_targets;  r¨   zBuild.get_targetsúT.List['Test']c                 C  r¥   r    )rÐ   r¦   rG   rG   rK   Ú	get_tests>  r¨   zBuild.get_testsc                 C  r¥   r    )rÑ   r¦   rG   rG   rK   Úget_benchmarksA  r¨   zBuild.get_benchmarksúT.List['Headers']c                 C  r¥   r    )rÒ   r¦   rG   rG   rK   Úget_headersD  r¨   zBuild.get_headersúT.List['Man']c                 C  r¥   r    )rÓ   r¦   rG   rG   rK   Úget_manG  r¨   zBuild.get_manúT.List['Data']c                 C  r¥   r    )rÕ   r¦   rG   rG   rK   Úget_dataJ  r¨   zBuild.get_dataúT.List['SymlinkData']c                 C  r¥   r    )rÖ   r¦   rG   rG   rK   Úget_symlinksM  r¨   zBuild.get_symlinksúT.List['EmptyDir']c                 C  r¥   r    )rÔ   r¦   rG   rG   rK   Úget_emptydirP  r¨   zBuild.get_emptydirúT.List['InstallDir']c                 C  r¥   r    )rÛ   r¦   rG   rG   rK   Úget_install_subdirsS  r¨   zBuild.get_install_subdirsú
'Compiler'rò   ú'MachineChoice'r½   c                 C  ó   | j | }| | ¡ g ¡S r    )rÌ   ÚgetÚget_language©r¢   rñ   rò   ÚdrG   rG   rK   Úget_global_argsV  ó   
zBuild.get_global_argsÚprojectr   c                 C  ó,   | j | }| |¡}|sg S | | ¡ g ¡S r    )rÎ   r  r  )r¢   rñ   r  rò   r  ÚargsrG   rG   rK   Úget_project_argsZ  s
   

zBuild.get_project_argsc                 C  r
  r    )rÍ   r  r  r  rG   rG   rK   Úget_global_link_argsa  r  zBuild.get_global_link_argsc                 C  r  r    )rÏ   r  r  )r¢   rñ   r  rò   r  rV   rG   rG   rK   Úget_project_link_argse  s
   

zBuild.get_project_link_argsN)r   rÈ   )r{   rÇ   )rí   rÇ   r{   rŸ   )rñ   r1   r{   rŸ   )r{   r÷   )r{   rù   )r{   rü   )r{   rþ   )r{   r   )r{   r  )r{   r  )r{   r  )rñ   r  rò   r	  r{   r½   )rñ   r  r  r   rò   r	  r{   r½   )rŒ   r   rŽ   Ú__doc__rà   rå   rç   rë   rð   ró   rõ   rö   rø   rú   rû   rý   rÿ   r  r  r  r  r  r  r  r  rG   rG   rG   rK   rÇ   é   s.    
(

	












rÇ   c                   @  sp   e Zd ZU dZded< ded< ded< eedZded	< ddd„Zddd„Z	ddd„Z
ddd„Zdddd„ZdS )ÚIncludeDirsz7Internal representation of an include_directories call.r   Úcurdirr½   Úincdirsr“   Ú	is_system©Údefault_factoryÚextra_build_dirsr{   c                 C  s   d}|  | jj| j| j¡S )Nz
<{} {}/{}>)ÚformatÚ	__class__rŒ   r  r  ©r¢   ÚrrG   rG   rK   Ú__repr__z  s   zIncludeDirs.__repr__c                 C  r¥   r    )r  r¦   rG   rG   rK   Ú
get_curdir~  r¨   zIncludeDirs.get_curdirc                 C  r¥   r    )r  r¦   rG   rG   rK   Úget_incdirs  r¨   zIncludeDirs.get_incdirsc                 C  r¥   r    )r  r¦   rG   rG   rK   Úget_extra_build_dirs„  r¨   z IncludeDirs.get_extra_build_dirsNÚ	sourcedirÚbuilddirr˜   c                 C  sH   g }| j D ]}| tj || j|¡¡ |r!| tj || j|¡¡ q|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)
        )r  r‡   Úosr·   rˆ   r  )r¢   r'  r(  ZstrlistZidirrG   rG   rK   Úto_string_list‡  s   
€zIncludeDirs.to_string_list©r{   r   ©r{   r½   r    )r'  r   r(  r˜   r{   r½   )rŒ   r   rŽ   r  r•   r   ré   r  r#  r$  r%  r&  r*  rG   rG   rG   rK   r  n  s   
 



r  c                   @  s’   e Zd ZU dZded< eedZded< eedZded< eedZ	d	ed
< dZ
ded< d#dd„Zd$dd„Zed%dd„ƒZd&dd„Zd#d d!„Zd"S )'rB   zI
    Holds a list of sources for which the objects must be extracted
    z'BuildTarget'Útargetr  r—   ÚsrclistúT.List['GeneratedTypes']Úgenlistú0T.List[T.Union[str, 'File', 'ExtractedObjects']]ÚobjlistTr“   Ú	recursiver{   rŸ   c                 C  s   | j jr
|  ¡  d S d S r    )r-  Úis_unityÚcheck_unity_compatibler¦   rG   rG   rK   Ú__post_init__¡  s   ÿzExtractedObjects.__post_init__r   c                 C  s   d}|  | jj| jj| j¡S )Nz<{0} {1!r}: {2}>)r  r   rŒ   r-  r†   r.  r!  rG   rG   rK   r#  ¥  ó   zExtractedObjects.__repr__rl   úT.Sequence['FileOrString']Úgenerated_sourcesúT.Sequence['GeneratedTypes']úT.List['FileOrString']c                 C  s8   t | ƒ} |D ]}| ¡ D ]}|  |¡ qqdd„ | D ƒS )Nc                 S  s   g | ]	}t  |¡r|‘qS rG   )r   Ú	is_source)rI   ÚsrG   rG   rK   rÃ   µ  ó    z0ExtractedObjects.get_sources.<locals>.<listcomp>)ré   Úget_outputsr‡   )rl   r9  Úgensrcr=  rG   rG   rK   rª   ©  s   üzExtractedObjects.get_sourcesúT.List[FileOrString]ú*T.Dict['Compiler', T.List['FileOrString']]c                 C  s   |   ||¡}t| jj ¡ |ƒS r    )rª   r   r-  Ú	compilersÚvalues)r¢   rl   r9  Zsources_rG   rG   rK   Úclassify_all_sources·  s   z%ExtractedObjects.classify_all_sourcesc                 C  sV   |   | jj| jj¡}|   | j| j¡}| ¡ D ]\}}t|ƒt|| ƒkr(tdƒ‚qd S )Nz~Single object files can not be extracted in Unity builds. You can only extract all the object files for each compiler at once.)	rE  r-  rl   Ú	generatedr.  r0  râ   rÜ   r   )r¢   ZcmpsrcsZextracted_cmpsrcsÚcompZsrcsrG   rG   rK   r5  »  s   ÿÿz'ExtractedObjects.check_unity_compatibleN©r{   rŸ   r+  )rl   r8  r9  r:  r{   r;  )rl   rA  r9  r:  r{   rB  )rŒ   r   rŽ   r  r•   r   ré   r.  r0  r2  r3  r6  r#  Ústaticmethodrª   rE  r5  rG   rG   rG   rK   rB   –  s   
 


)r   Úorderc                   @  sZ   e Zd ZU dZedd„ dZded< dd	d
„Zddd„Zddd„Z	ddd„Z
d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                   C  s   t tƒS r    )r   ré   rG   rG   rG   rK   Ú<lambda>×  s    zStructuredSources.<lambda>r  zYT.DefaultDict[str, T.List[T.Union[File, CustomTarget, CustomTargetIndex, GeneratedList]]]rl   rí   r{   c                 C  s4   | j  ¡ }|j  ¡ D ]\}}||  |¡ q
t|ƒS r    )rl   rë   râ   ÚextendrK  )r¢   rí   rl   rî   rï   rG   rG   rK   Ú__add__Ù  s   
zStructuredSources.__add__r“   c                 C  ó
   t | jƒS r    )r“   rl   r¦   rG   rG   rK   Ú__bool__ß  r¤   zStructuredSources.__bool__ú=T.Union[File, CustomTarget, CustomTargetIndex, GeneratedList]c                 C  s   | j d d S )zXGet the first source in the root

        :return: The first source in the root
        r„   r   r©   r¦   rG   rG   rK   Ú
first_fileâ  s   zStructuredSources.first_fileúET.List[T.Union[File, CustomTarget, CustomTargetIndex, GeneratedList]]c                 C  s   t tj | j ¡ ¡ƒS r    )ré   Ú	itertoolsÚchainÚfrom_iterablerl   rD  r¦   rG   rG   rK   Úas_listé  s   zStructuredSources.as_listc                 C  s>   | j  ¡ D ]}|D ]}t|tƒr|jr  dS q	  dS q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)rl   rD  rã   r   Zis_built)r¢   ÚfilesÚfrG   rG   rK   Ú
needs_copyì  s   
ÿûzStructuredSources.needs_copyN)rí   rK  r{   rK  ©r{   r“   )r{   rQ  )r{   rS  )rŒ   r   rŽ   r  r   rl   r•   rN  rP  rR  rW  rZ  rG   rG   rG   rK   rK  Ì  s   
 ÿ



rK  c                   @  s|  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dZded< dZ	ded< e
jdYdd„ƒZe
jdYdd„ƒZdZdd„Zd[d!d"„Zd[d#d$„Zd[d%d&„Zd[d'd(„Zd\d*d+„Zd]d-d.„Zd^d0d1„ZdYd2d3„ZdYd4d5„ZdYd6d7„Zed_d9d:„ƒZed`d<d=„ƒZdYd>d?„ZdadBdC„ZdbdFdG„ZdcdIdJ„Z dddNdO„Z!ededPdQ„ƒZ"dfdRdS„Z#dgdUdV„Z$dfdWdX„Z%dS )hÚTargetr   r†   rž   z'SubProject'r   r“   rj   r   rò   rÈ   r   FrX   Úbuild_always_staler  r—   rf   Nz+InitVar[T.Optional[T.Dict[OptionKey, str]]]re   r{   c                 C  ó   d S r    rG   r¦   rG   rG   rK   Útypename  ó   zTarget.typenamec                 C  r^  r    rG   r¦   rG   rG   rK   Útype_suffix  r`  zTarget.type_suffixÚ	overridesú"T.Optional[T.Dict[OptionKey, str]]rŸ   c                   sb   |r‡ fdd„|  ¡ D ƒ}ni }t|ˆ jjjˆ jƒˆ _tˆ jƒr/t 	t
 dˆ j› d¡¡ d S d S )Nc                   s*   i | ]\}}|j r|jˆ jd n||“qS )©Úmachine)rJ   Úevolverò   ©rI   rî   rï   r¦   rG   rK   Ú
<dictcomp>  s    ÿz(Target.__post_init__.<locals>.<dictcomp>z                Target "z§" has a path separator in its name.
                This is not supported, it can cause unexpected failures and will become
                a hard error in the future.)râ   r!   r   r
   Úoptionsr   r   r†   r   ÚwarningÚtextwrapÚdedent)r¢   rb  ZovrrG   r¦   rK   r6    s   
ÿ

ÿþzTarget.__post_init__rí   Úobjectc                 C  s   t |tƒstS |  ¡ | ¡ k S r    ©rã   r\  ÚNotImplementedÚget_id©r¢   rí   rG   rG   rK   Ú__lt__#  ó   
zTarget.__lt__c                 C  s   t |tƒstS |  ¡ | ¡ kS r    rn  rq  rG   rG   rK   Ú__le__(  rs  zTarget.__le__c                 C  s   t |tƒstS |  ¡ | ¡ kS r    rn  rq  rG   rG   rK   Ú__gt__-  rs  zTarget.__gt__c                 C  s   t |tƒstS |  ¡ | ¡ kS r    rn  rq  rG   rG   rK   Ú__ge__2  rs  zTarget.__ge__úT.Tuple[str, str]c                 C  ó   t ‚r    ©ÚNotImplementedErrorr¦   rG   rG   rK   Úget_default_install_dir7  ó   zTarget.get_default_install_dirú$T.List[T.Union[str, Literal[False]]]c                 C  rx  r    ry  r¦   rG   rG   rK   r¬   :  r|  zTarget.get_custom_install_dirúBT.Tuple[T.List[T.Union[str, Literal[False]]], str, Literal[False]]c                 C  st   |   ¡ \}}|  ¡ }|r"|d |kr"|d dur"d}dd„ |D ƒ}nd}|r+||d< n|g}|gt|ƒ }|||fS )Nr   Tc                 S  s   g | ]}t |d dƒ‘qS )ÚoptnameN)Úgetattr)rI   ÚirG   rG   rK   rÃ   F  rÄ   z*Target.get_install_dir.<locals>.<listcomp>F)r{  r¬   r}   )r¢   Zdefault_install_dirZdefault_install_dir_nameÚoutdirsrš   Zinstall_dir_namesrG   rG   rK   Úget_install_dir=  s   

zTarget.get_install_dirc                 C  r¥   r    ©r†   r¦   rG   rG   rK   Úget_basenameS  r¨   zTarget.get_basenamec                 C  r¥   r    ©rž   r¦   rG   rG   rK   Ú
get_subdirV  r¨   zTarget.get_subdirc                 C  r¥   r    )r_  r¦   rG   rG   rK   Úget_typenameY  r¨   zTarget.get_typenameÚ	target_idc                 C  s,   t  ¡ }| | jddd¡ | ¡ d d… S )Nzutf-8Úreplace)ÚencodingÚerrorsé   )ÚhashlibZsha256ÚupdateÚencodeÚ	hexdigest)r‰  ÚhrG   rG   rK   Ú_get_id_hash\  s   zTarget._get_id_hashra  c                 C  sF   |  dd¡  dd¡}t|ƒrJ ‚|| }| r!t | ¡}|d | 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†   ra  Ú	name_partZmy_idZsubdir_partrG   rG   rK   Úconstruct_id_from_pathf  s   

zTarget.construct_id_from_pathc                 C  s   |   | j| j|  ¡ ¡S r    )r˜  rž   r†   ra  r¦   rG   rG   rK   rp  y  s   ÿzTarget.get_idÚkwargsúT.Dict[str, T.Any]c                 C  sN   d|v r|d | _ t| j tƒstdƒ‚n	| dd¡rd| _ |  |  |¡¡ d S )Nrj   z)build_by_default must be a boolean value.rX   FT)rj   rã   r“   r‹   r  Úset_option_overridesÚparse_overrides©r¢   r™  rG   rG   rK   Úprocess_kwargs_base}  s   
ÿzTarget.process_kwargs_baseÚoption_overridesúT.Dict[OptionKey, str]c                 C  sH   i | j _| ¡ D ]\}}|jr|| j j|j| jd< q|| j j|< qd S )Nrd  )ri  rb  râ   rJ   rf  rò   )r¢   rŸ  rî   rï   rG   rG   rK   r›  ‰  s   üzTarget.set_option_overridesr!   c                 C  r¥   r    )ri  r¦   rG   rG   rK   Úget_options‘  r¨   zTarget.get_optionsÚkeyú'OptionKey'ú#T.Union[str, int, bool, 'WrapMode']c                 C  s   t  d| j| j¡S )Nz!T.Union[str, int, bool, WrapMode])ÚTÚcastri  Úvalue)r¢   r¢  rG   rG   rK   Ú
get_option”  s   zTarget.get_optionc                 C  sz   |   dg ¡}t|tƒrt d|¡S i }t|ƒ}|D ]!}d|vr#tdƒ‚| dd¡\}}t 	| 
¡ ¡}| 
¡ }|||< q|S )Nre   r   ú=z%Overrides must be of form "key=value"r	   )r  rã   rê   r¥  r¦  r   r‹   Úsplitr   Zfrom_stringÚstrip)r™  ÚoptsÚresultrb  Úorî   rï   r¢  rG   rG   rK   rœ  ›  s   

zTarget.parse_overridesc                 C  ó   dS ©NFrG   r¦   rG   rG   rK   Úis_linkable_target¯  r|  zTarget.is_linkable_targetr½   c                 C  ó   g S r    rG   r¦   rG   rG   rK   r?  ²  r|  zTarget.get_outputsc                 C  r¯  r°  rG   r¦   rG   rG   rK   Úshould_installµ  r|  zTarget.should_installr+  )rb  rc  r{   rŸ   )rí   rm  r{   r“   ©r{   rw  ©r{   r}  )r{   r~  )r‰  r   r{   r   )rž   r   r†   r   ra  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•   rX   r]  r   ré   rf   re   ÚabcÚabstractpropertyr_  Úabstractmethodra  r6  rr  rt  ru  rv  r{  r¬   rƒ  r…  r‡  rˆ  rI  r“  r˜  rp  rž  r›  r¡  r¨  rœ  r±  r?  r³  rG   rG   rG   rK   r\  ý  sP   
 










	






r\  )Ú	metaclassc                      st  e Zd ZU eZded< d¯‡ fdd„Zd°dd„Zdd„ Zdd„ Z	e
d±dd „ƒZd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd²d)d*„Zed³d.d/„ƒZd´d2d3„Zdµd4d5„Zd6d7„ Zd8d9„ Zd:d;„ Zd<d=„ Zd¶dAdB„Zd·d¸dEdF„Zd¹dHdI„ZedJdKd¹dLdM„ƒZdºdPdQ„ZedJdKdºdRdS„ƒZedJdKd»dUdV„ƒZ d¼dXdY„Z!d½dZd[„Z"d¾d]d^„Z#d_d`„ Z$d¿dbdc„Z%dÀdfdg„Z&dÁdhdi„Z'dµdjdk„Z(dldm„ Z)dÂdndo„Z*dpdq„ Z+drds„ Z,dÃdudv„Z-dÄdxdy„Z.d±dzd{„Z/d±d|d}„Z0dÅdd€„Z1dÆd‚dƒ„Z2d„d…„ Z3dÇd‡dˆ„Z4d±d‰dŠ„Z5d‹dŒ„ Z6ddŽ„ Z7dÈdd‘„Z8dÉd“d”„Z9dÂdÊd™dš„Z:dËd›dœ„Z;dÌdždŸ„Z<dµd d¡„Z=d¢d£„ Z>dÍd¥d¦„Z?d±d§d¨„Z@d±d©dª„ZAd±d«d¬„ZBd­d®„ ZC‡  ZDS )ÎrA   r}  r`   r†   r   rž   r   r5   rò   r   rl   úT.List['SourceOutputs']Ústructured_sourcesúT.Optional[StructuredSources]r_   úT.List[ObjectTypes]r   rÈ   rC  úT.Dict[str, 'Compiler']c              
     s.  t ƒ  |||d||¡ |	| _tƒ | _g | _|| _g | _g | _|
 	d¡| _
g | _g | _g | _tƒ | _d| _d| _d| _| jg| _d| _i | _i | _g | _g | _ttƒ| _d| _d| _tƒ | _|  |¡ |   |¡ |  !|
¡ t"| j| j| j| j| j|
 #dd¡gƒsˆt$ %d|› d¡ |  &|
¡ |  '¡  |  (¡  d S )NTrY   FZno_nameZ_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))Úsuperrà   Úall_compilersr   rC  r_   r»  Úexternal_depsÚinclude_dirsr  rY   Úlink_targetsÚlink_whole_targetsrd   rÜ   Ú
added_depsÚname_prefix_setÚname_suffix_setÚfilenameÚoutputsÚneed_installÚpchÚ
extra_argsrl   rF  r   ré   Ú
d_featuresrt   rn   Zrpath_dirs_to_removeÚprocess_sourcelistÚprocess_objectlistÚprocess_kwargsÚanyÚpopr   rj  Úcheck_unknown_kwargsÚvalidate_installÚcheck_module_linking©r¢   r†   rž   r   rò   rl   r»  r_   r   rC  r™  ©r   rG   rK   rà   ½  sF   





ÿ
zBuildTarget.__init__r{   rŸ   c                 C  sF   |   ¡  | jrt| j| jgƒrtdƒ‚| jrd| jvr!tdƒ‚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 targetsN)Úvalidate_sourcesr»  rÑ  rl   rF  r   rC  r¦   rG   rG   rK   Ú	post_initô  s   ÿzBuildTarget.post_initc                 C  ó   d}|  | jj|  ¡ | j¡S ©Nú<{0} {1}: {2}>)r  r   rŒ   rp  rÈ  ©r¢   Úrepr_strrG   rG   rK   r#  ý  r7  zBuildTarget.__repr__c                 C  s   | j › S r    r„  r¦   rG   rG   rK   Ú__str__  ó   zBuildTarget.__str__r“   c                 C  s(   |   tdƒ¡}|dkp|dko| jdkS )NZunityÚonrØ   r„   )r¨  r   r   )r¢   Z	unity_optrG   rG   rK   r4    s   zBuildTarget.is_unityc                 C  s:   | j tju r| jr| j ¡ rtdƒ‚t 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   ÚBUILDrÊ  r   rÞ   r‹   r   rj  r¦   rG   rG   rK   rÔ  	  s
   
üzBuildTarget.validate_installc                 C  s   |   || j¡ d S r    )Úcheck_unknown_kwargs_intÚknown_kwargsr  rG   rG   rK   rÓ    s   z BuildTarget.check_unknown_kwargsc                 C  sN   g }|D ]}||vr|  |¡ qt|ƒdkr%t d | jd |¡¡¡ d S d S )Nr   z-Unknown keyword argument(s) in target {}: {}.ú, )r‡   r}   r   rj  r  r†   rˆ   )r¢   r™  rå  Zunknownsrî   rG   rG   rK   rä    s   
€ÿz$BuildTarget.check_unknown_kwargs_intc                 C  sž   t |tƒsJ ‚|D ]C}t |tttfƒr| j |¡ q	t |ttt	fƒr>dd„ | 
¡ D ƒ}|r7td|d › dƒ‚| j |¡ q	tdt|ƒj›d| j›dƒ‚d S )	Nc                 S  s   g | ]}t |ƒs|‘qS rG   )r%   )rI   r®  rG   rG   rK   rÃ   #  rÄ   z2BuildTarget.process_objectlist.<locals>.<listcomp>zGenerated file r   z) in the 'objects' kwarg is not an object.zBad object of type ú in target r‚   )rã   ré   r   r   rB   r_   r‡   r<   r=   r>   r?  r‹   rF  ÚtyperŒ   r†   )r¢   r_   r=  Znon_objectsrG   rG   rK   rÏ    s   ÷zBuildTarget.process_objectlistc                 C  sZ   t ƒ }|D ]%}t|tƒr||vr| j |¡ | |¡ qt|tttfƒr*| j	 |¡ q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   rl   r‡   Úaddr<   r=   r>   rF  )r¢   rl   Zadded_sourcesr=  rG   rG   rK   rÎ  *  s   	

€€úzBuildTarget.process_sourcelistrñ   r  r;  c                 C  s2   d}|d d … D ]}|   |¡r| |¡ d}q|S )NFT)Úcan_compileÚremove)rñ   rl   Úremovedr=  rG   rG   rK   Úcan_compile_remove_sources<  s   

€z&BuildTarget.can_compile_remove_sourcesÚextra_languagesr½   c                 C  sä   |D ]
}| j | | j|< q| jr| jgnt}| js| jrGt | j| j¡D ]"}t|t	t
fƒr.q$|j ¡ D ]\}}||v rE|| jvrE|| j|< q3q$| js^|D ]}|| j v r]| j | | j|<  nqLtt| j ¡ dd„ 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                 S  s   t | d ƒS ©Nr   )r'   )rä   rG   rG   rK   rL  h  s    z4BuildTarget.process_compilers_late.<locals>.<lambda>)r¢  N)rÀ  rC  rY   r&   rÃ  rÄ  rT  rU  rã   r<   r=   râ   r   ÚsortedrÚ  )r¢   rî  rJ   Z
link_langsrä   r†   rñ   rG   rG   rK   Úprocess_compilers_lateE  s,   
€þ
þ
ÿz"BuildTarget.process_compilers_latec                 C  s*  g }t | j| j| j| jgƒs|S t| jƒ}| j ¡ }| jr=| jj ¡ D ]}|D ]}t|t	t
fƒr6| |¡ q'| |¡ q'q#|D ]}| ¡ D ]}t|ƒsP| |¡ qEq?| jD ]}|jD ]}t|t	t
fƒrh| |¡ qZqU| jD ]&}	t|	tƒsuqm|	 |	jg ¡}
|
D ]}|jdkr†q~|j| jvr’|| j|j< q~qm|rÒ|D ]9}| j ¡ D ]\}}| |¡r´|| jvr²|| j|<  nqŸt|ƒrÑt t	|ƒ¡ ¡ }d| j ¡ › d|›}t|ƒ‚q˜d| jv räd| jvrä| jd | jd< d| jv rtd| jdd}|  |¡}z| j| | j|< W |S  t y   | |¡ Y |S 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.
        ZvalazNo z machine compiler for ÚcZcythonÚlanguage)re  rJ   )!rÑ  rl   rF  r_   r»  ré   rë   rD  rã   r   r   r‡   r?  r%   rÁ  rB   rE  r.  ró  rC  rÀ  râ   rê  r)   ÚpathlibÚPathÚas_posixrò   Zget_lower_case_namer   r   r¨  ÚKeyError)r¢   Zmissing_languagesrl   rF  rï   Úsrcr@  r=  r  r®  ZcompsrcsrG  rJ   rñ   r·   Úmr¢  r§  rG   rG   rK   Úprocess_compilersk  sz   	

ü
€ú


€þ


€ù	


ý€
ýýzBuildTarget.process_compilersc                   sJ   t ˆ jƒdkr!t‡ fdd„dD ƒƒr#d ˆ j ¡ ¡}td|› ƒ‚d S d S )Nr	   c                 3  ó    | ]}|ˆ j v V  qd S r    ©rC  rH   r¦   rG   rK   Ú	<genexpr>Ã  ó   € z/BuildTarget.validate_sources.<locals>.<genexpr>)ÚcsÚjavaræ  z*Cannot mix those languages into a target: )r}   rC  rÑ  rˆ   Úkeysr‹   )r¢   ÚlangsrG   r¦   rK   rÙ  Â  s   $þzBuildTarget.validate_sourcesc                 C  st   t |ƒ}|D ]1}t|tƒr| j |¡ qt|tƒr(| j t | jj| j	|¡¡ qt
|dƒr4| j |¡ q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   rd   r‡   r   Úfrom_source_filer   Ú
source_dirrž   Úhasattrr‹   )r¢   rl   r=  rG   rG   rK   Úprocess_link_dependsÇ  s   	

ÿ
ÿ÷z BuildTarget.process_link_dependsc                 C  r¥   r    )r™  r¦   rG   rG   rK   Úget_original_kwargsÞ  r¨   zBuildTarget.get_original_kwargsc                 C  sl   t   |¡| _| j ¡ D ]\}}t|tƒrt|dd| j|< qdD ]}|| jv r3t| j| dd| j|< q d S )NT)Úflatten)r   r^   ra   rl   )rë   r™  râ   rã   ré   r   )r¢   r™  rî   rï   rä   rG   rG   rK   Úcopy_kwargsá  s   
€
€þzBuildTarget.copy_kwargsr.  ú1T.List[T.Union['FileOrString', 'GeneratedTypes']]rB   c                 C  s  t | jƒ}t | jƒ}g }g }|D ]l}t|ttfƒr@t|tƒr&td| j|ƒ}nt dd| j	¡ ||vr:t
d|› dƒ‚| |¡ qt|tttfƒrrt dd| j	¡ t|tƒrX|jn|}||vrl||vrlt
d| ¡ › dƒ‚| |¡ qt
dt|ƒj› d	ƒ‚t| ||ƒS )
NFz!File argument for extract_objectsú0.50.0z Tried to extract unknown source r‚   z%Generated sources for extract_objectsz0.61.0zCObject extraction arguments must be strings, Files or targets (got z).)rÜ   rl   rF  rã   r   r   rž   r+   Ú
single_user   r   r‡   r<   r=   r>   r-  r…  rè  rŒ   rB   )r¢   r.  Zsources_setZgenerated_setZobj_srcZobj_genrø  r-  rG   rG   rK   Úextract_objectsê  s(   


zBuildTarget.extract_objectsTr3  c                 C  s   t | | j| j| j|ƒS r    )rB   rl   rF  r_   )r¢   r3  rG   rG   rK   Úextract_all_objects  s   ÿzBuildTarget.extract_all_objectsú'ImmutableListProtocol[BuildTargetTypes]c                 C  ó   |   ¡ S r    ©Úget_transitive_link_depsr¦   rG   rG   rK   Úget_all_link_deps  rá  zBuildTarget.get_all_link_depsNr   c                 C  s    g }| j D ]}|| ¡ 7 }q|S r    )rÃ  r  ©r¢   r­  r  rG   rG   rK   r  
  s   
z$BuildTarget.get_transitive_link_depsr…   úT.Mapping[str, str]c                 C  s
   |   |¡S r    )Ú get_transitive_link_deps_mapping©r¢   r…   rG   rG   rK   Úget_link_deps_mapping  r¤   z!BuildTarget.get_link_deps_mappingc                 C  s4   i }| j D ]}| |¡}| ¡ }| |¡ |}q|S r    )rÃ  r  rë   r  )r¢   r…   r­  r  ÚmappingZ
result_tmprG   rG   rK   r    s   


z,BuildTarget.get_transitive_link_deps_mappingúT.AbstractSet[str]c                 C  s<   t ƒ }| jD ]}t|tƒs| | ¡ ¡ | | ¡ ¡ q|S r    )r   rÃ  rã   r@   ré  r‡  r  Úget_link_dep_subdirsr  rG   rG   rK   r    s   

z BuildTarget.get_link_dep_subdirsrw  c                 C  ó   | j  ¡ dfS )Nz{libdir})r   Z
get_libdirr¦   rG   rG   rK   r{  (  ó   z#BuildTarget.get_default_install_dirc                 C  r¥   r    ©r`   r¦   rG   rG   rK   r¬   +  r¨   z"BuildTarget.get_custom_install_dirúT.Optional['FileMode']c                 C  r¥   r    ©rb   r¦   rG   rG   rK   r®   .  r¨   z#BuildTarget.get_custom_install_modec                 C  s  |   |¡ |  |¡ | dg ¡ | d| j¡| _t|dƒ}|D ]}t|tjƒr.tt	 
d¡ƒ‚|  |¡ qt|dƒ}|D ]}|  |¡ q;tD ]}t||› dƒ}|  ||¡ qE|  dt|dƒ¡ |  d	t|d
ƒ¡ t| tƒrs| dd¡rŽ| d| jd ¡| _| d| jd ¡| _| dd ¡| _ttƒ}| dd¡}|rž||d< | dg ¡}	|	rª|	|d< | dg ¡}
|
r¶|
|d< d|v rÑt|dƒ}|D ]}t|tƒsÌtdƒ‚qÁ||d< |rÖ|| _t|dƒ| _| jD ]}t|tƒsêtdƒ‚qß| jD ]}d|v sú| d¡rt t	 
d¡¡ qî|  | d g ¡¡ t|d!ƒ}|   |¡ t|d"ƒ}|  !|¡ t"| d#g ¡tt#fƒ| _$| d$d ¡| _%t&| d%d g¡ƒ| _'| d&d'¡}t|tƒsMtd(ƒ‚|| _(t| tƒr‚d | _)d)|v rwd*|v rgtd+ƒ‚|d) | _)t| j)t#ƒswtd,ƒ‚|  *| d*d-¡¡| _+nd)|v r‹td.ƒ‚d*|v r”td/ƒ‚t|d0ƒ}|D ]'}t|t,ƒs¥J ‚t-j. /| j0 1¡ |j2|j3¡}t-j. 4|¡sÁtd1|› d2ƒ‚q›|| _5| d3d'¡| _6t| j6tƒsØtd4ƒ‚| d5d'¡| _7t| j7tƒsêtd6ƒ‚t|d7ƒ}|D ](}t|tƒsýtd8ƒ‚t-j. /| j0 1¡ | j2|¡}t-j. 4|¡std9|› d2ƒ‚qñ|| _8d:|v rD|d: }t|tƒr4|r3td;ƒ‚nt|tƒs>td<ƒ‚|| _9d=| _:d>|v rt|d> }t|tƒr[|rZtd?ƒ‚nt|tƒsetd@ƒ‚|d'krntdAƒ‚|| _;d=| _<t| t=ƒr—| j0j>| j? }| @¡ s‹| A¡ rd=| _Bn|  C|dBdC¡| _Bt| tƒs§t| t=ƒr½| jBs½| j0j>| j?  D¡ rµd=| _En|  C|dDdE¡| _E| dFd=¡| _Ft| jFt#ƒsÏtdGƒ‚| dHd'¡| _Gt| jGtƒsátdIƒ‚| jGd'krýg dJ¢}| jG|vrÿtdK H| jGdL /|¡¡ƒ‚d S d S )MNrß   rX   r^   a²                      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.
                r]   rF   rò  rD   ÚcpprE   ro   FrQ   z.hrS   z.vapirR   rN   ZunittestrP   ÚversionsrM   ÚdebugrO   z7Arguments to d_import_dirs must be include_directories.Úimport_dirsrV   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.
                rd   ra   r   r`   rb   rc   rv   r„   zMain class must be a stringr[   rk   zACan specify only gui_app or win_subsystem for a target, not both.z!Argument gui_app must be boolean.Úconsolez1Argument gui_app can only be used on executables.z7Argument win_subsystem can only be used on executables.rf   z%Tried to add non-existing extra file r‚   rZ   zInstall_rpath is not a string.rW   zBuild_rpath is not a string.rU   z"Resource argument is not a string.z#Tried to add non-existing resource rh   z3name_prefix array must be empty to signify default.zname_prefix must be a string.Tr\   z3name_suffix array must be empty to signify default.zname_suffix must be a string.zƒname_suffix should not be an empty string. If you want meson to use the default behaviour for each platform pass `[]` (empty array)rt   Zb_staticpicrn   Úb_pierg   z/Implicit_include_directories must be a boolean.ri   z'GNU symbol visibility must be a string.)rÝ   ZinternalZhiddenZ	protectedZinlineshiddenz+GNU symbol visibility arg {} not one of: {}ræ  )Irž  r	  r  rÊ  r   rã   r   ZExternalLibraryr   rk  rl  Úlinkr]   r(   Úadd_compiler_argsÚadd_pchÚ
Executabler†   rQ   rS   rR   r   ré   r  r‹   rÍ  rV   r   Ú
startswithr   rj  r  Úadd_include_dirsÚadd_depsr   r“   r`   rb   r   rc   rv   r[   Úvalidate_win_subsystemrk   r   r)  r·   rˆ   r   Zget_source_dirrž   ÚfnameÚisfilerf   rZ   rW   rU   r…   rÆ  ÚsuffixrÇ  r@   Úmachinesrò   Ú	is_darwinÚ
is_windowsrt   Ú_extract_pic_pieÚ
is_androidrn   rg   ri   r  )r¢   r™  ZllistZ
linktargetZlwholerJ   Z	lang_argsZ	dfeaturesZdfeature_unittestZdfeature_versionsZdfeature_debugZdfeature_import_dirsr  r  rÂ   ZinclistZdeplistrv   rf   ÚtrialrU   r"  rh   r\   rù  Z	permittedrG   rG   rK   rÐ  1  s  





ÿ

ÿ
€



ÿ





ÿ
ÿ
ÿ
ÿ
 ýzBuildTarget.process_kwargsr§  c                 C  s,   |  ¡ }t d|¡d u rtd|› dƒ‚|S )Nz(boot_application|console|efi_application|efi_boot_service_driver|efi_rom|efi_runtime_driver|native|posix|windows)(,\d+(\.\d+)?)?z!Invalid value for win_subsystem: r‚   )ÚlowerÚreÚ	fullmatchr‹   ©r¢   r§  rG   rG   rK   r.  ×  s   z"BuildTarget.validate_win_subsystemÚargÚoptionc                 C  sº   | j d | j d  }d| ¡  |v sd| ¡  |v r+t d|› d|› d| j›¡ dS t|ƒ}||v r8|| }n|| jjj	v rH| jjj	| j
}nd}t|tƒs[td	|› d
| j›dƒ‚|S )Nrò  r!  z-fz	Use the 'z' kwarg instead of passing '-fz' manually to TFú	Argument z to z must be boolean)rÌ  r8  Úupperr   rj  r†   r   r   r
   ri  r§  rã   r“   r‹   )r¢   r™  r<  r=  Z	all_flagsrî   ÚvalrG   rG   rK   r5  Ý  s    

zBuildTarget._extract_pic_piec                 C  r¥   r    )rÈ  r¦   rG   rG   rK   Úget_filenameð  r¨   zBuildTarget.get_filenamec                 C  r¥   r    ©rÉ  r¦   rG   rG   rK   r?  ó  r¨   zBuildTarget.get_outputsc                 C  ó   | j  |g ¡S r    )rÌ  r  ©r¢   ró  rG   rG   rK   Úget_extra_argsö  r  zBuildTarget.get_extra_argsc                 C  sb   g }|d u rg }t  | j| j¡D ]}||v s||v rq| |¡ t|tƒr.|| || ¡7 }q|S r    )rT  rU  rÃ  rÄ  r‡   rã   r@   Úget_dependencies)r¢   rº   Ztransitive_depsrä   rG   rG   rK   rF  ù  s   

€zBuildTarget.get_dependenciesc                 C  r¥   r    r†  r¦   rG   rG   rK   Úget_source_subdir  r¨   zBuildTarget.get_source_subdirc                 C  r¥   r    r©   r¦   rG   rG   rK   rª     r¨   zBuildTarget.get_sourcesr1  c                 C  r¥   r    )r_   r¦   rG   rG   rK   Úget_objects  r¨   zBuildTarget.get_objectsr/  c                 C  r¥   r    )rF  r¦   rG   rG   rK   Úget_generated_sources  r¨   z!BuildTarget.get_generated_sourcesc                 C  r¥   r    ©rÊ  r¦   rG   rG   rK   r³    r¨   zBuildTarget.should_installc                 C  rO  r    )r“   rË  r¦   rG   rG   rK   Úhas_pch  r¤   zBuildTarget.has_pchró  c                 C  rC  r    )rË  r  rD  rG   rG   rK   Úget_pch  r  zBuildTarget.get_pchúT.List['IncludeDirs']c                 C  r¥   r    )rÂ  r¦   rG   rG   rK   Úget_include_dirs  r¨   zBuildTarget.get_include_dirsc                 C  s¢  t |ƒ}|D ]È}|| jv rqt|tjƒri|  |j¡ |  |j| 	¡ ¡ | j
 |j
¡ |jD ]}|  |¡ q-|jD ]}|  |¡ q8| ¡ sH| ¡ rbt dg | ¡ | ¡ g g g g i g g g ¡}| j |¡ |  |j¡ nIt|tjƒrˆ|| jvr| j |¡ |  | ¡ ¡ |  |j¡ n*t|tƒr‘tdƒ‚t|dƒr™|j}t|dƒs£t|dƒr§tdƒ‚tdt|ƒj›dƒ‚|j}d	D ]}||v rÇ| j|  || ¡ q·| j |¡ qd S )
NZ	undefinedz]Tried to use a build target as a dependency.
You probably should put it in link_with instead.Úheld_objectZproject_args_frozenZglobal_args_frozenz­Tried 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()).)r"  r$  ) r   rÅ  rã   r   ZInternalDependencyrÎ  rl   r,  ra   Zget_include_typer_   rM  Ú	librariesr'  Zwhole_librariesr]   Zget_compile_argsZget_link_argsrÁ  r‡   r-  Zext_depsZ
Dependencyrª   rA   r‹   r  rO  rè  rŒ   rÍ  ré  )r¢   Údepsr‘   rÂ   ZextpartZdep_d_featuresZfeaturerG   rG   rK   r-    sP   


ü


€ËzBuildTarget.add_depsúT.List[dependencies.Dependency]c                 C  r¥   r    )rÁ  r¦   rG   rG   rK   Úget_external_depsV  r¨   zBuildTarget.get_external_depsc                 C  r¯  r°  rG   r¦   rG   rG   rK   Úis_internalY  r|  zBuildTarget.is_internalc                 C  s8  t |ƒD ]•}t| tƒr3| jr3t|ttfƒr$| ¡ s#t d| j	› d¡ n| 
¡ r3| ¡ s3|  |¡  S t|ttfƒsAt|›dƒ‚| ¡ sMtd|›dƒ‚t| tƒrmt|tƒrm|jsmd|j	›d| j	›d}|d	7 }t|ƒ‚| j|jur“d
| j› d|j› d| j	›}| j ¡ rŒt|d ƒ‚t |d ¡ | j |¡ qd S )Nz/Try to link an installed static library target zl with acustom target that is not installed, this might cause problemswhen you try to use this static libraryz is not a target.zLink target 'z' is not linkable.ú"Can't link non-PIC static library ú into shared library ú. ú9Use the 'pic' option to static_library to build with PIC.ú$Tried to mix libraries for machines ú and rç  ú' This is not possible in a cross build.ú This will fail in cross build.)r   rã   r@   rÊ  r<   r=   r³  r   rj  r†   rT  Ú	uses_rustr]   r\  r‹   r±  r?   rt   rò   r   rÞ   rÃ  r‡   ©r¢   r-  rä   ÚmsgrG   rG   rK   r'  \  s.   €
ßzBuildTarget.linkc                 C  s  t |ƒD ]ˆ}t|ttfƒr+| ¡ std|›dƒ‚| ¡ r!tdƒ‚t| tƒr*tdƒ‚n't|tƒs7t|›dƒ‚t| tƒrR|j	sRd|j
›d| j
›d}|d	7 }t|ƒ‚| j|jurxd
| j› d|j› d| j
›}| j ¡ rqt|d ƒ‚t |d ¡ t| tƒr†|  j| ¡ 7  _| j |¡ qd S )NzCustom target z is not linkable.z<Can only link_whole custom targets that are static archives.z7Cannot link_whole a custom target into a static libraryz is not a static library.rU  rV  rW  rX  rY  rZ  rç  r[  r\  )r   rã   r<   r=   r±  r‹   Úlinks_dynamicallyr@   r?   rt   r†   rò   r   rÞ   r   rj  r_   Úextract_all_objects_recurserÄ  r‡   r^  rG   rG   rK   r]   €  s0   
þ


çzBuildTarget.link_wholeú(T.List[T.Union[str, 'ExtractedObjects']]c                 C  s.   |   ¡ g}| jD ]}| ¡ r|| ¡ 7 }q|S r    )r  rÃ  rT  ra  )r¢   Zobjsrä   rG   rG   rK   ra  œ  s   

€z'BuildTarget.extract_all_objects_recurseÚpchlistc                 C  s\  |sd S t |ƒdkrt |d ¡std|d › dƒ‚nft |ƒdkrxt |d ¡r5t |d ¡s4tdƒ‚n%t |d ¡rPt |d ¡sGtdƒ‚|d |d g}n
td|d › dƒ‚tj |d ¡tj |d ¡krntdƒ‚t 	d	d
| j
d¡ n
t |ƒdkr‚tdƒ‚|D ]"}t|tƒstdƒ‚tj tj | jj| j|¡¡s¦td|› dƒ‚q„|| 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   Z	is_headerr‹   r<  r)  r·   Údirnamer,   r  r   rã   r   r   r0  rˆ   r  rž   rË  )r¢   ró  rc  rY  rG   rG   rK   r)  £  s<   ÿÿ ÿ
ÿzBuildTarget.add_pchr  úT.Sequence['IncludeDirs']Úset_is_systemr˜   c                   sj   g }|D ]}t |tƒstdƒ‚| |¡ q|d u rd}|dkr,|dk‰ ‡ fdd„|D ƒ}|  j|7  _d S )NzAInclude directory to be added is not an include directory object.ZpreserveÚsystemc                   s&   g | ]}t | ¡ | ¡ ˆ | ¡ ƒ‘qS rG   )r  r$  r%  r&  ©rI   Úx©r  rG   rK   rÃ   Ì  s   & z0BuildTarget.add_include_dirs.<locals>.<listcomp>)rã   r  r‹   r‡   rÂ  )r¢   r  rg  ZidsÚarG   rk  rK   r,  Â  s   
zBuildTarget.add_include_dirsc                 C  sV   t |ƒ}|D ]}t|ttfƒstdƒ‚q|| jv r$| j|  |7  < d S || j|< d S )Nz%A non-string passed to compiler args.)r   rã   r   r   r‹   rÌ  )r¢   ró  r  rl  rG   rG   rK   r(  Ï  s   ÿ
zBuildTarget.add_compiler_argsúT.List[T.Tuple[str, str, str]]c                 C  r²  r    rG   r¦   rG   rG   rK   Úget_aliasesÙ  r|  zBuildTarget.get_aliasesc                 C  sz   g }| j D ]}|jdu rq|j|vr| |j¡ qt | j| j¡D ]}t|tt	fƒr+q!|j
D ]}||vr9| |¡ q.q!|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
        N)rÁ  ró  r‡   rT  rU  rÃ  rÄ  rã   r<   r=   rC  )r¢   r  r‘   Úlink_targetró  rG   rG   rK   Úget_langs_used_by_depsÜ  s    	


€

€þz"BuildTarget.get_langs_used_by_depsc              
   C  sx   | j r| j| j  }|S tD ]%}|| jv r2z
| j| }W |  S  ty1   td| j›d|› dƒ‚w qt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‚   )rY   rÀ  r&   rC  r÷  r   r†   )r¢   rG  rÂ   Z	prelinkerrG   rG   rK   Úget_prelinkerø  s"   
û
ÿÿÿý	zBuildTarget.get_prelinkerú T.Tuple['Compiler', T.List[str]]c           	   
   C  s0  | j r| j| j  }|| | j¡fS | jjj| j }|  ¡ }tdgƒ}t	D ]M}|| jv s/||v rqz|| }W n t
yH   td| j›d|› dƒ‚w g }t | j|¡D ]}||jkrj||jf|vrj|||  | j¡7 }qR||f  S q$t	D ]}z| j| }|| | j¡fW   S  t
y   Y qtw 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.
        )r!  Zcudaz0Could not get a dynamic linker for build target z". Requires a linker for language "rq  )rY   rÀ  Zlanguage_stdlib_only_link_flagsr   r
   rC  rò   rp  Ú	frozensetr&   r÷  r   r†   rT  rU  ró  ÚAssertionError)	r¢   rG  rÀ  Z	dep_langsZ
MASK_LANGSrÂ   ZlinkerZstdlib_argsZdlrG   rG   rK   Ú$get_clink_dynamic_linker_and_stdlibs  sD   þ
ÿÿÿ€ò
ÿz0BuildTarget.get_clink_dynamic_linker_and_stdlibsc                 C  ó
   d| j v S )NrØ  rü  r¦   rG   rG   rK   r]  D  r¤   zBuildTarget.uses_rustc                 C  rw  )NZfortranrü  r¦   rG   rG   rK   Úuses_fortranG  r¤   zBuildTarget.uses_fortranc                 C  s0   |   ¡ 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.
        rØ  >   ZoptlinkZxilinkzlld-linkr'  )r]  rÀ  rv  Zget_linker_id)r¢   rñ   Ú_rG   rG   rK   Úget_using_msvcJ  s   zBuildTarget.get_using_msvcc                 C  s¢   | j D ]K}t|tƒrN|jsN| jj| j  ¡ r#td| j	› d|j	› dƒ‚| jj| j  
¡ r5t| tƒr5d|_qt d| j	› d|j	› d|j	› d|j	› d	¡ d|_qdS )	zR
        Warn if shared modules are linked with target: (link_with) #2865
        ztarget z links against shared module z. This is not permitted on OSXTzk, which is incorrect.
             This will be an error in the future, so please use shared_library() for z7 instead.
             If shared_module() was used for z‡ because it has references to undefined symbols,
             use shared_library() with `override_options: ['b_lundef=false']` instead.N)rÃ  rã   ÚSharedModuleÚforce_sonamer   r2  rò   r3  r   r†   r6  r   Zdeprecation)r¢   ro  rG   rG   rK   rÕ  d  s    
ÿþ
ü€îz BuildTarget.check_module_linking©r†   r   rž   r   r   r5   rò   r   rl   rº  r»  r¼  r_   r½  r   rÈ   rC  r¾  rH  r[  )rl   rº  r{   rŸ   )rñ   r  rl   r;  r{   r“   )rî  r½   r,  )r.  r
  r{   rB   )T)r3  r“   r{   rB   )r{   r  ©r…   r   r{   r  ©r{   r  r´  rµ  ©r{   r  )r§  r   r{   r   )r<  r   r=  r   r+  r    )r{   r1  ©r{   r/  )ró  r   r{   r½   )r{   rM  )r{   rR  ©r{   rb  )ró  r   rc  r½   r{   rŸ   )r  rf  rg  r˜   r{   rŸ   )ró  r   r  r;  r{   rŸ   ©r{   rm  )r{   rs  )ErŒ   r   rŽ   Úknown_build_target_kwargsrå  r•   rà   rÚ  r#  rà  Úpropertyr4  rÔ  rÓ  rä  rÏ  rÎ  rI  rí  rñ  rú  rÙ  r  r  r	  r  r  r  r   r  r  r  r  r{  r¬   r®   rÐ  r.  r5  rA  r?  rE  rF  rG  rª   rH  rI  r³  rK  rL  rN  r-  rS  rT  r'  r]   ra  r)  r,  r(  rn  rp  rr  rv  r]  rx  rz  rÕ  Ú__classcell__rG   rG   r×  rK   rA   ¸  sˆ   
 
7	


&W
	





 
'










9
$







<

rA   c                   @  sr   e Zd Zdddd dœd-dd„Zd.dd„Zd/dd„Zd0dd„Zd0dd„Zd0dd„Ze	d1d!d"„ƒZ
		d2d3d+d,„ZdS )4Ú	GeneratorNF)ÚdepfileÚcaptureÚdependsr†   Úexeú/T.Union['Executable', programs.ExternalProgram]Ú	argumentsr½   Úoutputrˆ  r˜   r‰  r“   rŠ  ú8T.Optional[T.List[T.Union[BuildTarget, 'CustomTarget']]]r†   r   c                C  s2   || _ || _|| _|pg | _|| _|| _|| _d S r    )r‹  rˆ  r‰  rŠ  ÚarglistrÉ  r†   )r¢   r‹  r  rŽ  rˆ  r‰  rŠ  r†   rG   rG   rK   rà   }  s   	

zGenerator.__init__r{   c                 C  s   d}|  | jj| j¡S )Nz
<{0}: {1}>)r  r   rŒ   r‹  rÞ  rG   rG   rK   r#  Ž  s   zGenerator.__repr__c                 C  r¥   r    )r‹  r¦   rG   rG   rK   Úget_exe’  r¨   zGenerator.get_exeÚinnamec                   s6   t j |¡‰t j ˆ¡d ‰ ‡ ‡fdd„| jD ƒ}|S )Nr   c                   ó    g | ]}|  d ˆ ¡  dˆ¡‘qS ©ú
@BASENAME@ú@PLAINNAME@©rŠ  ri  ©ÚbasenameÚ	plainnamerG   rK   rÃ   ˜  ó     z/Generator.get_base_outnames.<locals>.<listcomp>)r)  r·   r™  ÚsplitextrÉ  )r¢   r’  ÚbasesrG   r˜  rK   Úget_base_outnames•  s   zGenerator.get_base_outnamesc                 C  sD   | j d u r	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™  rG   rG   rK   Úget_dep_outname›  s
   
zGenerator.get_dep_outnamec                   s2   t j |¡‰t j ˆ¡d ‰ ‡ ‡fdd„| jD ƒS )Nr   c                   r“  r”  r—  ri  r˜  rG   rK   rÃ   ¥  r›  z)Generator.get_arglist.<locals>.<listcomp>)r)  r·   r™  rœ  r  )r¢   r’  rG   r˜  rK   Úget_arglist¢  s   zGenerator.get_arglistÚparentr7  c                 C  s   t  |¡ | ¡}|jd dkS )Nr   z..)rô  ÚPurePathÚrelative_toÚparts)r¢  r7  ÚrelpathrG   rG   rK   Úis_parent_path§  s   zGenerator.is_parent_pathrX  úTT.Iterable[T.Union[str, File, 'CustomTarget', 'CustomTargetIndex', 'GeneratedList']]Ústateú%T.Union['Interpreter', 'ModuleState']Úpreserve_path_fromrÌ  úT.Optional[T.List[str]]ú'GeneratedList'c           
        sø   t | ˆ j||d ur|ng d}|D ]h}t|tƒr|j |¡ t|tƒr*|j |j¡ t|ttt fƒrD|j |¡ ‡ fdd„| ¡ D ƒ}nt|t	ƒrUt
 ˆ jjˆ j|¡g}n|g}|D ]}|rr| ˆ jjˆ jj¡}	|  ||	¡srtdƒ‚| |ˆ ¡ qZq|S )N©rÌ  c                   s   g | ]	}t  ˆ j|¡‘qS rG   )r   Úfrom_built_filerž   ©rI   rY  ©r©  rG   rK   rÃ   º  r>  z+Generator.process_files.<locals>.<listcomp>zmgenerator.process: When using preserve_path_from, all input files must be in a subdirectory of the given dir.)r>   rž   rã   r<   rŠ  ré  r=   r-  r?  r   r   r  r   r  Úabsolute_pathÚ	build_dirr§  r‹   Úadd_file)
r¢   rX  r©  r«  rÌ  rŽ  ÚeÚfsrY  Úabs_frG   r±  rK   Úprocess_files¬  s(   


ûzGenerator.process_files)r‹  rŒ  r  r½   rŽ  r½   rˆ  r˜   r‰  r“   rŠ  r  r†   r   r+  )r{   rŒ  )r’  r   r{   r½   )r¢  r   r7  r   r{   r“   ©NN)
rX  r¨  r©  rª  r«  r˜   rÌ  r¬  r{   r­  )rŒ   r   rŽ   rà   r#  r‘  rž  r   r¡  rI  r§  r¸  rG   rG   rG   rK   r‡  |  s     ø




ýr‡  c                   @  sŒ   e Zd ZU dZded< ded< ded< ded	< d)dd„Zd*dd„Zd+dd„Zd,dd„Zd-dd„Z	d.dd „Z
d/d"d#„Zd-d$d%„Zd0d&d'„Zd(S )1r>   z The output of generator.process.r‡  Ú	generatorr   rž   r˜   r«  r½   rÌ  r{   rŸ   c                 C  sš   | j j| _tƒ | _g | _g | _i | _g | _g | _	| j
d u r g | _
t| j jtjƒrI| j j ¡ s2tdƒ‚| j j ¡ }tj |¡rK| j	 t |¡¡ d S d S d S )Nz4Tried to use not-found external program as generator)rº  r‹  r†   rÜ   rŠ  Ú
infilelistÚoutfilelistÚoutmapÚextra_dependsÚdepend_filesrÌ  rã   r   ÚExternalProgramÚfoundr‹   Úget_pathr)  r·   Úisabsr‡   r   Úfrom_absolute_file)r¢   r·   rG   rG   rK   r6  Ó  s"   

ùzGeneratedList.__post_init__Úinfiler   Úoutfilesr©  rª  c           	      C  sh   g }|  |jj|jj¡}tj | j¡sJ ‚tj || j¡}tj 	|¡}|D ]}| 
tj ||¡¡ q%|S r    )r²  r   r  r³  r)  r·   rÃ  r«  r¦  re  r‡   rˆ   )	r¢   rÅ  rÆ  r©  r­  Zin_absÚrelZpath_segmentZofrG   rG   rK   Úadd_preserved_path_segmentè  s   z(GeneratedList.add_preserved_path_segmentÚnewfilec                 C  sJ   | j  |¡ | j |j¡}| jr|  |||¡}|  j|7  _|| j|< d S r    )	r»  r‡   rº  rž  r/  r«  rÈ  r¼  r½  )r¢   rÉ  r©  rÆ  rG   rG   rK   r´  ò  s   zGeneratedList.add_filer´   c                 C  r¥   r    )r»  r¦   rG   rG   rK   Ú
get_inputsú  r¨   zGeneratedList.get_inputsc                 C  r¥   r    )r¼  r¦   rG   rG   rK   r?  ý  r¨   zGeneratedList.get_outputsrÈ  ú'File'c                 C  ó
   | j | S r    )r½  )r¢   rÈ  rG   rG   rK   Úget_outputs_for   r¤   zGeneratedList.get_outputs_forú'Generator'c                 C  r¥   r    )rº  r¦   rG   rG   rK   Úget_generator  r¨   zGeneratedList.get_generatorc                 C  r¥   r    r®  r¦   rG   rG   rK   rE    r¨   zGeneratedList.get_extra_argsc                 C  r¥   r    r†  r¦   rG   rG   rK   r‡  	  r¨   zGeneratedList.get_subdirNrH  )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•   r6  rÈ  r´  rÊ  r?  rÍ  rÏ  rE  r‡  rG   rG   rG   rK   r>   É  s   
 








r>   c                      s   e Zd ZeZdZd1‡ fdd„Zd2‡ fdd„Zd3dd„Zdd„ Z	dd„ Z
d4d!d"„Zd#d$„ Zd4d%d&„Zd'd(„ Zd5d*d+„Zd6d,d-„Zd7d/d0„Z‡  ZS )8r*  Ú
executabler†   r   rž   r   r5   rò   r   rl   rº  r»  r¼  r_   r½  r   rÈ   rC  r¾  c                   sÎ   t dƒ}d|
vr||jjv r|jj| j|
d< tƒ  |||||||||	|
¡
 |
 dd¡| _t| jt	ƒs7t
dƒ‚|
 d¡| _t| jt	ttd ƒfƒsLt
dƒ‚| jrRd| _| jr^| jdu r^t
d	ƒ‚| j| _d| _d S )
Nr&  rn   ro   Fz3"export_dynamic" keyword argument must be a booleanrm   z="export_dynamic" keyword argument must be a boolean or stringTzK"implib" keyword argument must not be false for if "export_dynamic" is true)r   r
   ri  r§  r¿  rà   r  ro   rã   r“   r‹   rm   r   rè  Úis_linkwithableZwas_returned_by_find_program)r¢   r†   rž   r   rò   rl   r»  r_   r   rC  r™  r¢  r×  rG   rK   rà     s$   ÿ
zExecutable.__init__r{   rŸ   c                   sp  t ƒ  ¡  | jj| j }t| dƒsd| _t| dƒsµ| ¡ s&| ¡ s&d| j	v r*d| _
n‹|j d¡s5|jdkr9d| _
n|d	| j	v rH| j	d	  ¡  d
¡sWd| j	v r[| j	d  ¡  d
¡r[d| _
nZd	| j	v rj| j	d	  ¡  d¡syd| j	v r}| j	d  ¡  d¡r}d| _
n8d	| j	v r| j	d	  ¡  d¡rd| _
n%d	| j	v rž| j	d	  ¡ dv s¬d| j	v r°| j	d  ¡ dv r°d| _
n| ¡ | _
| j| _| j
rÆ|  jd| j
 7  _| jg| _d | _d | _d | _d | _| jr| jd }t| jtƒré| j}| ¡ sò| ¡ r|› d| _d|› d| _|  ¡ r	| j| _n| j| _| ¡ o*d| j	v p |  ¡ p |  ¡ o*| jj tdƒ¡}|r6| jd | _d S d S )Nr…   r„   r1  rÿ  r‹  ZwasmZ
emscriptenZjsrò  Zarmclangr!  ZaxfZccrxÚabsZxc16Zelf>   Zc2000ZtiÚoutr‚   z.exeú.libÚlibú.ar#  ú.pdb)r¿  rÚ  r   r2  rò   r  r…   r4  Ú	is_cygwinrC  r1  rh  r+  rp  Zget_exe_suffixr†   rÈ  rÉ  Úimport_filenameÚvs_import_filenameÚgcc_import_filenameÚdebug_filenamero   rã   rm   r   rz  r]  r
   r¨  r   )r¢   re  Zimplib_basenameÚcreate_debug_filer×  rG   rK   rÚ  3  sp   


ÿÿÿÿÿÿ





ÿüÿzExecutable.post_initrw  c                 C  r  )Nz{bindir})r   Z
get_bindirr¦   rG   rG   rK   r{  q  r  z"Executable.get_default_install_dirc                 C  r¥   )z,Human friendly description of the executabler„  r¦   rG   rG   rK   Údescriptiont  s   zExecutable.descriptionc                 C  r¯  )Nz@exerG   r¦   rG   rG   rK   ra  x  r|  zExecutable.type_suffixr˜   c                 C  r¥   ©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¦   rG   rG   rK   Úget_import_filename{  ó   zExecutable.get_import_filenamec                 C  ó   | j r	| j| jgS g S r    ©rÙ  rÚ  rÛ  r¦   rG   rG   rK   Úget_import_filenameslistƒ  ó   z#Executable.get_import_filenameslistc                 C  r¥   ©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¦   rG   rG   rK   Úget_debug_filenameˆ  râ  zExecutable.get_debug_filenamec                 C  r¥   r    )rÑ  r¦   rG   rG   rK   r±    r¨   zExecutable.is_linkable_targetú'ImmutableListProtocol[str]'c                 C  r¥   )zProvides compatibility with ExternalProgram.

        Since you can override ExternalProgram instances with Executables.
        rB  r¦   rG   rG   rK   Úget_command“  s   zExecutable.get_commandc                 C  s   t j | j| j¡S )ú,Provides compatibility with ExternalProgram.)r)  r·   rˆ   rž   rÈ  r¦   rG   rG   rK   rÂ  š  s   zExecutable.get_pathr“   c                 C  r¯  )rì  TrG   r¦   rG   rG   rK   rÁ  ž  r`  zExecutable.foundr}  rH  r´  r¯   )r{   rê  r+  r[  )rŒ   r   rŽ   Úknown_exe_kwargsrå  r_  rà   rÚ  r{  rÞ  ra  rá  rå  ré  r±  rë  rÂ  rÁ  r†  rG   rG   r×  rK   r*    s    !
>



r*  c                      sn   e Zd ZeZdZd)‡ fdd„Zd*‡ fdd„Zd+dd„Zd,dd„Z	d d!„ Z
‡ fd"d#„Zd$d%„ Zd-d'd(„Z‡  ZS ).r@   zstatic libraryr†   r   rž   r   r5   rò   r   rl   rº  r»  r¼  r_   r½  r   rÈ   rC  r¾  c                   sD   |
  dd¡| _t| jtƒstdƒ‚tƒ  |||||||||	|
¡
 d S )Nru   Fz+Prelink keyword argument must be a boolean.)r  ru   rã   r“   r‹   r¿  rà   rÖ  r×  rG   rK   rà   ¨  s   ÿzStaticLibrary.__init__r{   rŸ   c                   s  t ƒ  ¡  dˆ jv rtdƒ‚dˆ jv rHtˆ dƒrˆ jdkr&t d¡ dˆ _nˆ jdvr4td	ˆ j› d
ƒ‚ˆ jdkrHt‡ fdd„dD ƒƒrHtdƒ‚tˆ dƒsPdˆ _	tˆ dƒstdˆ jv rqtˆ dƒrdˆ jdkrhdˆ _
nˆ jdkrpdˆ _
ndˆ _
ˆ j	ˆ j d ˆ j
 ˆ _ˆ jgˆ _d S )Nrÿ  z&Static libraries not supported for C#.rØ  rT   rÕ  z8Defaulting Rust static library target crate type to rlibÚrlib)rî  Ú	staticlibúCrate type "z=" invalid for static libraries; must be "rlib" or "staticlib"c                 3  rû  r    r„  ©rI   rò  r¦   rG   rK   rý  Ç  rþ  z*StaticLibrary.post_init.<locals>.<genexpr>©ú-ú r‚   zœRust crate type "rlib" does not allow spaces, periods or dashes in the library name due to a limitation of rustc. Replace them with underscores, for exampler…   r1  rï  rl  r‚   )r¿  rÚ  rC  r‹   r  rT   r   r#  rÑ  r…   r1  r†   rÈ  rÉ  r¦   r×  r¦   rK   rÚ  º  s.   




 
	


€zStaticLibrary.post_initr…   r  c                 C  ó   i S r    rG   r  rG   rG   rK   r  ß  r|  z#StaticLibrary.get_link_deps_mappingrw  c                 C  r  )Nz{libdir_static})r   Zget_static_lib_dirr¦   rG   rG   rK   r{  â  r  z%StaticLibrary.get_default_install_dirc                 C  r¯  )Nz@starG   r¦   rG   rG   rK   ra  å  r|  zStaticLibrary.type_suffixc                   sD   t ƒ  |¡ d|v r |d }t|tƒr|| _d S td|› dƒ‚d S )NrT   úInvalid rust_crate_type "ú": must be a string.)r¿  rÐ  rã   r   rT   r‹   )r¢   r™  rT   r×  rG   rK   rÐ  è  s   

ûzStaticLibrary.process_kwargsc                 C  r¯  ©NTrG   r¦   rG   rG   rK   r±  ñ  r|  z StaticLibrary.is_linkable_targetr“   c                 C  s   | j  S r    rJ  r¦   rG   rG   rK   rT  ô  rá  zStaticLibrary.is_internalr}  rH  r~  r´  r[  )rŒ   r   rŽ   Úknown_stlib_kwargsrå  r_  rà   rÚ  r  r{  ra  rÐ  r±  rT  r†  rG   rG   r×  rK   r@   £  s    
%
	r@   c                      s¦   e Zd ZeZdZd6‡ fdd„Zd7‡ fdd„Zd8dd„Zd9dd„Z	d d!„ Z
ed"d#„ ƒZ‡ fd$d%„Zd:d'd(„Zd:d)d*„Zd+d,„ Zd-d.„ Zd;d0d1„Zd2d3„ Zd4d5„ Z‡  ZS )<r?   zshared libraryr†   r   rž   r   r5   rò   r   rl   rº  r»  r¼  r_   r½  r   rÈ   rC  r¾  c                   sX   d | _ d | _g | _d | _d | _d | _d | _d | _d| _t	ƒ  
|||||||||	|
¡
 d S r°  )rr   Ú	ltversionrs   rq   rÙ  rÚ  rÛ  rÜ  Zshared_library_onlyr¿  rà   rÖ  r×  rG   rK   rà   ü  s   ÿzSharedLibrary.__init__r{   rŸ   c                   s°   t ƒ  ¡  dˆ jv r?tˆ dƒrˆ jdkrt d¡ dˆ _nˆ jdvr+tdˆ j› dƒ‚ˆ jd	kr?t‡ fd
d„dD ƒƒr?tdƒ‚tˆ dƒsGd ˆ _	tˆ dƒsOd ˆ _
dˆ _ˆ  ¡  d S )NrØ  rT   rÕ  z<Defaulting Rust dynamic library target crate type to "dylib"Údylib)rû  Úcdylibú
proc-macrorð  zK" invalid for dynamic libraries; must be "dylib", "cdylib", or "proc-macro"rü  c                 3  rû  r    r„  rñ  r¦   rG   rK   rý  %  rþ  z*SharedLibrary.post_init.<locals>.<genexpr>rò  z­Rust crate types "dylib" and "proc-macro" do not allow spaces, periods or dashes in the library name due to a limitation of rustc. Replace them with underscores, for exampler…   r1  ú{0.prefix}{0.name}.{0.suffix})r¿  rÚ  rC  r  rT   r   r#  r‹   rÑ  r…   r1  Úbasic_filename_tplÚdetermine_filenamesr¦   r×  r¦   rK   rÚ    s   



 

zSharedLibrary.post_initr…   r  c           	      C  sd   i }|   |¡}t| ƒ}||vr+|  ¡ }|  ¡ \}}}tj ||d |¡}| ||i¡ | |¡ |S rï  )r  rŠ   rA  rƒ  r)  r·   rˆ   r  )	r¢   r…   r­  ZmappingsÚoldr/  r‚  ry  ÚnewrG   rG   rK   r  0  s   

z#SharedLibrary.get_link_deps_mappingrw  c                 C  r  )Nz{libdir_shared})r   Zget_shared_lib_dirr¦   rG   rG   rK   r{  <  r  z%SharedLibrary.get_default_install_dirc                 C  s4  d}d}d}| j | _d| jv rd}d}d| _d}nÑ| jj| j  ¡ r€d}d | jdur.| jnd| j	¡| _
d	 | jdur>| jnd
| j	¡| _|  ¡ r[d}| j	› d| _| jj tdƒ¡}n|  ¡ rod}| j
| _| jj tdƒ¡}nd
}| j| _| jr|d| _nnd| _nj| jj| j  ¡ r¬d}d	 | jdur•| jnd
| j	¡| _d}| j| _| jr¨d| _nBd| _n>| jj| j  ¡ rÄd
}d}| jrÀd| _n*d| _n&| jj| j  ¡ rÕd
}d}d| _nd
}d}| jràd| _n
| jrçd| _nd| _| jdu rò|| _| jdu rú|| _| j | ¡| _| j| jd< |rtj | j¡d d | _dS dS )añ  
        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, 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). The toolchain will output an import library in one of
        two formats: GCC or Visual Studio.

        When we're building with Visual Studio, the import library that will be
        generated by the toolchain is self.vs_import_filename, and with
        MinGW/GCC, it's self.gcc_import_filename. self.import_filename will
        always contain the import library name this target will generate.
        r„   Frÿ  Zdllrþ  Tz{}{}.libNz
{}{}.dll.arÕ  z.dll.libr#  z+{0.prefix}{0.name}-{0.soversion}.{0.suffix}Zcygrû  z+{0.prefix}{0.name}.{0.soversion}.{0.suffix}Úsoz+{0.prefix}{0.name}.{0.suffix}.{0.ltversion}z+{0.prefix}{0.name}.{0.suffix}.{0.soversion}r   r×  )rÿ  Úfilename_tplrC  r   r2  rò   r4  r  r…   r†   rÚ  rÛ  r]  rÙ  r
   r¨  r   rz  rr   rØ  r3  r6  rú  r1  rÈ  rÉ  r)  r·   rœ  rÜ  )r¢   r…   r1  rÝ  rG   rG   rK   r   ?  sx   
   

ÿz!SharedLibrary.determine_filenamesc                 C  sZ  z¡t | tƒr
t| ƒ} t | tƒrd| g } t | tƒs td| ›ƒ‚t| ƒdkr*tdƒ‚t| ƒdkr4d|  } t| d d … ƒD ]b\}}t |tƒrIt|ƒ}t |tƒsUtd|›ƒ‚t d|¡s_tdƒ‚| 	d¡}t|ƒd	v rvt|d
 ƒdkrvtdƒ‚t|ƒdv rˆt|d ƒdkrˆtdƒ‚t|ƒdkršt|d ƒdkrštdƒ‚|| |< q<W | S  t
y¬   tdƒ‚w )Nrd  zIShared library darwin_versions: must be a string, integer,or a list, not zEShared library darwin_versions: list must contain 2 or fewer elementsr	   zOShared library darwin_versions: list elements must be strings or integers, not ú[0-9]+(\.[0-9]+){0,2}zaShared library darwin_versions: must be X.Y.Z where X, Y, Z are numbers, and Y and Z are optionalr‚   >   r	   rd  é   r   iÿÿ  zYShared library darwin_versions: must be X.Y.Z where X is [0, 65535] and Y, Z are optional>   rd  r  éÿ   zWShared library darwin_versions: must be X.Y.Z where Y is [0, 255] and Y, Z are optionalr  zWShared library darwin_versions: must be X.Y.Z where Z is [0, 255] and Y, Z are optionalz0Shared library darwin_versions: value is invalid)rã   rz   r   ré   r‹   r}   Ú	enumerater9  r:  rª  Ú
ValueError)rs   r  rï   r¥  rG   rG   rK   Ú_validate_darwin_versions±  sF   



ÿ

ÿ

íþÿz'SharedLibrary._validate_darwin_versionsc                   sÜ  t ƒ  |¡ | jj| j  ¡ s{d|v r8|d | _t| jtƒs(t	dt
| jƒj ƒ‚t d| j¡s8t	d| j› dƒ‚d|v rX|d | _t| jtƒrMt| jƒ| _t| jtƒsWt	dƒ‚n| jrd| j d¡d	 | _d
|v rq|  |d
 ¡| _n
| jr{d| jg | _d|v rÃ|d }t|tƒr¡tj |¡r•t |¡| _n)t | jj| j|¡| _nt|tƒrª|| _nt|dƒrºt |j| ¡ ¡| _nt	dƒ‚|  |¡ d|v rê|d }t|tƒrÔ|| _ nt	d|› dƒ‚|dkrìt! "dd| j#¡ d S d S d S )Nrp   z1Shared library version needs to be a string, not r  z Invalid Shared library version "zO". Must be of the form X.Y.Z where all three are numbers. Y and Z are optional.rr   z4Shared library soversion is not a string or integer.r‚   r   rs   rd  rq   rA  zWShared library vs_module_defs must be either a string, a file object or a Custom TargetrT   rö  r÷  rý  zRust crate type "proc-macro"z0.62.0)$r¿  rÐ  r   r2  rò   r6  rú  rã   r   r‹   rè  rŒ   r9  r:  rr   rz   rª  r
  rs   r)  r·   rÃ  r   rÄ  rq   r  r  rž   r  r¯  rA  r  rT   r+   r  r   )r¢   r™  r·   rT   r×  rG   rK   rÐ  ×  sX   

ÿ


ÿ

ùzSharedLibrary.process_kwargsr˜   c                 C  r¥   rß  rà  r¦   rG   rG   rK   rá  	  râ  z!SharedLibrary.get_import_filenamec                 C  r¥   rç  rè  r¦   rG   rG   rK   ré  	  râ  z SharedLibrary.get_debug_filenamec                 C  rã  r    rä  r¦   rG   rG   rK   rå  "	  ræ  z&SharedLibrary.get_import_filenameslistc                 C  s   | g|   ¡  S r    r  r¦   rG   rG   rK   r  '	  r  zSharedLibrary.get_all_link_depsrm  c                 C  sž   g }| j dvs
| js|S | j dkr7| jr7| j| jkr7| 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ú  rr   r   ZruntimeZdevel)
r1  rr   rú  r  rŠ  r  rc   r‡   rÈ  rÿ  )r¢   ÚaliasesZ	alias_tplZltversion_filenameÚtagrG   rG   rK   rn  *	  s   
zSharedLibrary.get_aliasesc                 C  r¯  )Nz@sharG   r¦   rG   rG   rK   ra  J	  r|  zSharedLibrary.type_suffixc                 C  r¯  rø  rG   r¦   rG   rG   rK   r±  M	  r|  z SharedLibrary.is_linkable_targetr}  rH  r~  r´  r¯   rƒ  )rŒ   r   rŽ   Úknown_shlib_kwargsrå  r_  rà   rÚ  r  r{  r   rI  r
  rÐ  rá  ré  rå  r  rn  ra  r±  r†  rG   rG   r×  rK   r?   ÷  s$    

r
%
;

 r?   c                      s0   e Zd ZeZdZd‡ fdd„Zddd„Z‡  ZS )r{  zshared moduler†   r   rž   r   r5   rò   r   rl   rº  r»  r¼  r_   r½  r   rÈ   rC  r¾  c                   sH   d|
v rt dƒ‚d|
v rt dƒ‚tƒ  |||||||||	|
¡
 d| _d S )Nrp   z2Shared modules must not specify the version kwarg.rr   z4Shared modules must not specify the soversion kwarg.F)r   r¿  rà   r|  rÖ  r×  rG   rK   rà   W	  s   
ÿ
zSharedModule.__init__r{   rw  c                 C  r  )Nz{moduledir_shared})r   Zget_shared_module_dirr¦   rG   rG   rK   r{  m	  r  z$SharedModule.get_default_install_dirr}  r´  )	rŒ   r   rŽ   Úknown_shmod_kwargsrå  r_  rà   r{  r†  rG   rG   r×  rK   r{  R	  s
    r{  c                   @  s*   e Zd Zddd„Zdd
d„Zddd„ZdS )ÚBothLibrariesÚsharedr?   Ústaticr@   r{   rŸ   c                 C  s    d| _ || _|| _| jj| _d S )Nr  )Ú_preferred_libraryr  r  r   )r¢   r  r  rG   rG   rK   rà   q	  s   zBothLibraries.__init__r   c                 C  s   dt | jƒ› dt | jƒ› dS )Nz<BothLibraries: static=z	; shared=ú>)Úreprr  r  r¦   rG   rG   rK   r#  w	  s   zBothLibraries.__repr__rA   c                 C  s2   | 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¦   rG   rG   rK   Úget_default_objectz	  s
   

z BothLibraries.get_default_objectN)r  r?   r  r@   r{   rŸ   r+  )r{   rA   )rŒ   r   rŽ   rà   r#  r  rG   rG   rG   rK   r  p	  s    

r  c                   @  s0   e Zd ZU ded< ded< ded< ddd„ZdS )ÚCommandBaser—   r¿  ú,T.List[T.Union[BuildTarget, 'CustomTarget']]r   r   r   ÚcmdúJT.Sequence[T.Union[str, File, programs.ExternalProgram, BuildTargetTypes]]r{   ú7T.List[T.Union[str, File, BuildTarget, 'CustomTarget']]c              	   C  s8  t |ƒ}g }|D ]‘}t|tƒr| |¡ qt|tƒr&| j |¡ | |¡ qt|tjƒrN| ¡ s4t	dƒ‚| 
¡ }tj |¡rG| j t |¡¡ || ¡ 7 }qt|ttfƒra| j |¡ | |¡ qt|tƒr…t dd| j¡ | j |j¡ ||  t | ¡ | ¡ ¡¡7 }qt|tƒr’||  |¡7 }qt	d|›dƒ‚|S )Nz4Tried to use not-found external program in "command"z&CustomTargetIndex for command argumentz0.60r>  z in "command" is invalid)r   rã   r   r‡   r   r¿  r   rÀ  rÁ  r‹   rÂ  r)  r·   rÃ  rÄ  rë  rA   r<   r   r=   r+   r  r   r-  Úflatten_commandr¯  r‡  rA  ré   )r¢   r  Z	final_cmdrò  r·   rG   rG   rK   r  ‡	  s4   


 
zCommandBase.flatten_commandN)r  r  r{   r  )rŒ   r   rŽ   r•   r  rG   rG   rG   rK   r  	  s
   
 r  c                      sL  e Zd ZdZddddddddddddddddœdt‡ fd*d+„Zdud.d/„Zd0d1„ Zdvd3d4„Zdwd6d7„Zd8d9„ Z	dxd:d;„Z
dyd=d>„Zdzd@dA„Zd{dBdC„Zd|dDdE„Zd}dGdH„Zd~dJdK„Zd~dLdM„ZdNdO„ ZddQdR„ZdxdSdT„ZdxdUdV„Zd€dYdZ„Zdd\d]„Zd^d_„ Zdxd`da„Zd‚dcdd„Zdedf„ Zdƒdjdk„Zdldm„ Zdndo„ Zdpdq„ Zd„drds„Z ‡  Z!S )…r<   ÚcustomFN)r]  rj   r‰  r%  r¿  r¾  rˆ  ÚenvÚfeedrX   r`   rb   rc   Úabsolute_pathsÚbackendr†   r˜   rž   r   r   r   rÈ   ÚcommandúYT.Sequence[T.Union[str, BuildTargetTypes, GeneratedList, programs.ExternalProgram, File]]rl   úkT.Sequence[T.Union[str, File, BuildTargetTypes, ExtractedObjects, GeneratedList, programs.ExternalProgram]]rÉ  r½   r]  r“   rj   úT.Optional[bool]r‰  r%  r¿  ú$T.Optional[T.Sequence[FileOrString]]r¾  ú3T.Optional[T.Sequence[T.Union[str, SourceOutputs]]]rˆ  r  ú T.Optional[EnvironmentVariables]r  rX   r`   ú0T.Optional[T.List[T.Union[str, Literal[False]]]]rb   úT.Optional[FileMode]rc   rx   r  r   úT.Optional['Backend']c             
     sæ   t ƒ  |||dtj|||¡ t|ƒ| _t|tt||ƒg ƒƒ| _	|	d ur%|	n|| _
|
| _|| _t|p2g ƒ| _g | _|  |¡| _|| _|pEtƒ | _t|pKg ƒ| _|| _t|pUg ƒ| _|| _t|t| j	ƒƒ| _|rh|n| j	d | _|| _d S )NFr   )r¿  rà   r   ZHOSTré   rl   r   r   Úget_sources_string_namesrÉ  rj   r‰  r%  r¿  r   r  r!  rˆ  r#   r  r¾  r  r`   rb   r~   r}   rc   r†   r  )r¢   r†   rž   r   r   r!  rl   rÉ  r]  rj   r‰  r%  r¿  r¾  rˆ  r  r  rX   r`   rb   rc   r  r   r×  rG   rK   rà   «	  s2   ÿ
þÿ
zCustomTarget.__init__r{   rw  c                 C  r¯  )Nr¹  rG   r¦   rG   rG   rK   r{  ã	  r|  z$CustomTarget.get_default_install_dirc                 C  rÛ  rÜ  ©r  r   rŒ   rp  r!  rÞ  rG   rG   rK   r#  æ	  r7  zCustomTarget.__repr__ú#T.List[T.Union[SourceOutputs, str]]c                 C  sZ   g }|  | j¡ |  | j¡ | jD ]}t|tƒr| |j¡ qt|tj	ƒs*| |¡ q|S r    )
rM  r   r¾  rl   rã   r=   r‡   r-  r   rÀ  )r¢   rQ  rò  rG   rG   rK   Úget_target_dependenciesê	  s   


€z$CustomTarget.get_target_dependenciesú+T.Set[T.Union[BuildTarget, 'CustomTarget']]c                 C  sJ   t ƒ }|  ¡ }|D ]}t|tƒr| |¡ q	t|tƒr"| | ¡ ¡ q	|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ã   rA   ré  r<   r  Ú get_transitive_build_target_deps)r¢   ZbdepsrQ  r  rG   rG   rK   r0  õ	  s   	

€z-CustomTarget.get_transitive_build_target_depsc                 C  r¥   r    r   r¦   rG   rG   rK   rF  
  r¨   zCustomTarget.get_dependenciesc                 C  r¥   r    )rX   r¦   rG   rG   rK   r³  

  r¨   zCustomTarget.should_installr}  c                 C  r¥   r    r  r¦   rG   rG   rK   r¬   
  r¨   z#CustomTarget.get_custom_install_dirr  c                 C  r¥   r    r   r¦   rG   rG   rK   r®   
  r¨   z$CustomTarget.get_custom_install_modec                 C  r¥   r    rB  r¦   rG   rG   rK   r?  
  r¨   zCustomTarget.get_outputsc                 C  rô   rï  rB  r¦   rG   rG   rK   rA  
  r¤   zCustomTarget.get_filenameúcT.List[T.Union[str, File, BuildTarget, GeneratedTypes, ExtractedObjects, programs.ExternalProgram]]c                 C  r¥   r    r©   r¦   rG   rG   rK   rª   
  r¨   zCustomTarget.get_sourcesúT.List[GeneratedList]c                 C  s(   g }| j D ]}t|tƒr| |¡ q|S r    )rl   rã   r>   r‡   )r¢   Zgenlistsrò  rG   rG   rK   Úget_generated_lists
  s   


€z CustomTarget.get_generated_listsc                 C  r  r    )r3  r¦   rG   rG   rK   rI  #
  rá  z"CustomTarget.get_generated_sourcesc                 C  sn   | j d u r	tdƒ‚|r&tj |d ¡}tj |¡d }| j  d|¡ d|¡S d| j v s0d| j v r4t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¢   Zinfilenamesrš  r™  rG   rG   rK   r   &
  s   
zCustomTarget.get_dep_outnamerŽ  c                 C  s"   |  d¡rdS t d|¡rdS dS )N)rÖ  z.dllrÔ  z.sorƒ   Tz\.so(\.\d+)*$F)Úendswithr9  Úsearch)r¢   rŽ  rG   rG   rK   Úis_linkable_output2
  s
   
zCustomTarget.is_linkable_outputc                 C  s"   t | jƒdkr	dS |  | jd ¡S )Nr	   Fr   )r}   rÉ  r6  r¦   rG   rG   rK   r±  :
  s   zCustomTarget.is_linkable_targetc                 C  s   t j | jd ¡d }|dvS )úÉWhether this target links dynamically or statically

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

        :return: True if is dynamically linked, otherwise False
        r   éÿÿÿÿ¾   rÖ  rÔ  )r)  r·   rœ  rÉ  ©r¢   ÚsufrG   rG   rK   r`  ?
  s   zCustomTarget.links_dynamicallyr…   r  c                 C  rõ  r    rG   r  rG   rG   rK   r  I
  r|  z"CustomTarget.get_link_deps_mappingr  c                 C  s   t ƒ S r    )r   r¦   rG   rG   rK   r  L
  r¨   z!CustomTarget.get_link_dep_subdirsc                 C  r²  r    rG   r¦   rG   rG   rK   r  O
  r|  zCustomTarget.get_all_link_depsc                 C  s&   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É  r=   rT  r¦   rG   rG   rK   rT  R
  s   zCustomTarget.is_internalrb  c                 C  r  r    )r?  r¦   rG   rG   rK   ra  Z
  rá  z(CustomTarget.extract_all_objects_recursec                 C  r¯  )Nz@cusrG   r¦   rG   rG   rK   ra  ]
  r|  zCustomTarget.type_suffixÚindexrz   ú'CustomTargetIndex'c                 C  s   t | | j| ƒS r    )r=   rÉ  ©r¢   r<  rG   rG   rK   Ú__getitem__`
  ó   zCustomTarget.__getitem__c                 C  rx  r    ry  )r¢   r<  r§  rG   rG   rK   Ú__setitem__c
  r|  zCustomTarget.__setitem__c                 C  rx  r    ry  r>  rG   rG   rK   Ú__delitem__f
  r|  zCustomTarget.__delitem__c                 c  s    | j D ]}t| |ƒV  qd S r    )rÉ  r=   )r¢   r  rG   rG   rK   Ú__iter__i
  s   €
ÿzCustomTarget.__iter__c                 C  rO  r    )r}   rÉ  r¦   rG   rG   rK   Ú__len__m
  r¤   zCustomTarget.__len__),r†   r˜   rž   r   r   r   r   rÈ   r!  r"  rl   r#  rÉ  r½   r]  r“   rj   r$  r‰  r“   r%  r“   r¿  r%  r¾  r&  rˆ  r˜   r  r'  r  r“   rX   r“   r`   r(  rb   r)  rc   rx   r  r“   r   r*  r´  )r{   r-  )r{   r/  r[  rµ  r€  r,  r+  )r{   r1  )r{   r2  )rŽ  r   r{   r“   r~  r  r‚  )r<  rz   r{   r=  )r{   rz   )"rŒ   r   rŽ   r_  rà   r{  r#  r.  r0  rF  r³  r¬   r®   r?  rA  rª   r3  rI  r   r6  r±  r`  r  r  r  rT  ra  ra  r?  rA  rB  rC  rD  r†  rG   rG   r×  rK   r<   §	  s\    å
8


















r<   c                      sH   e Zd ZdZdZd#‡ fdd„Zd$dd„Zed%dd„ƒZd&d!d"„Z	‡  Z
S )'ÚCompileTargetz|
    Target that only compile sources without linking them together.
    It can be used as preprocessor, or transpiler.
    Úcompiler†   r   rž   r   r   rÈ   rl   rº  Úoutput_templrñ   r1   r   r/   Úcompile_argsr½   ra   úT.List[IncludeDirs]r   rR  c                   s¸   |  ¡ |i}dd|j› d|	d|
d|i}tƒ  ||||j|d g |||¡
 || _|| _|| _g | _i | _	| j
D ]}|  |¡ q6| jD ]}| ¡ D ]}| | ||¡}|  t |¡¡ qGqAd S )Nrj   FrF   ra   r   )r  ró  r¿  rà   rò   rÈ  rñ   rG  rÉ  Úsources_maprl   Ú_add_outputrF  r?  Zget_target_generated_dirr   Zfrom_built_relative)r¢   r†   rž   r   r   rl   rG  rñ   r   rH  ra   r   rC  r™  rY  r@  r=  Zrel_srcr×  rG   rK   rà   x
  s,   üÿ

þÿzCompileTarget.__init__r{   c                 C  r¯  )Nz@compilerG   r¦   rG   rG   rK   ra  ™
  r|  zCompileTarget.type_suffixr“   c                 C  r¯  r°  rG   r¦   rG   rG   rK   r4  œ
  r`  zCompileTarget.is_unityrY  r   rŸ   c                 C  sN   t j |j¡}t j |¡d }| j d|¡ d|¡}| j |¡ || j	|< d S )Nr   r•  r–  )
r)  r·   r™  r/  rœ  rG  rŠ  rÉ  r‡   rJ  )r¢   rY  rš  r™  r®  rG   rG   rK   rK   
  s
   zCompileTarget._add_output)r†   r   rž   r   r   r   r   rÈ   rl   rº  rG  r   rñ   r1   r   r/   rH  r½   ra   rI  r   rR  r+  r[  )rY  r   r{   rŸ   )rŒ   r   rŽ   r  r_  rà   ra  r…  r4  rK  r†  rG   rG   r×  rK   rE  p
  s    
!rE  c                      sx   e Zd ZdZ		d)d*‡ fdd„Zd+dd„Zd,dd„Zd-dd„Zd.dd„Zd/d d!„Z	d+d"d#„Z
d0d%d&„Zd+d'd(„Z‡  ZS )1Ú	RunTargetÚrunNTr†   r   r!  úJT.Sequence[T.Union[str, File, BuildTargetTypes, programs.ExternalProgram]]r   úT.Sequence[Target]rž   r   r   rÈ   r  ú"T.Optional['EnvironmentVariables']Údefault_envr“   c	           	        sF   t ƒ  |||dtj|¡ || _g | _|  |¡| _d| _|| _	|| _
d S r°  )r¿  rà   r   rã  r   r¿  r  r!  r  r  rQ  )	r¢   r†   r!  r   rž   r   r   r  rQ  r×  rG   rK   rà   ¬
  s   	
zRunTarget.__init__r{   c                 C  s    d}|  | jj|  ¡ | jd ¡S )NrÝ  r   r,  rÞ  rG   rG   rK   r#  ½
  s   zRunTarget.__repr__r  c                 C  r¥   r    r   r¦   rG   rG   rK   rF  Á
  r¨   zRunTarget.get_dependenciesr/  c                 C  r²  r    rG   r¦   rG   rG   rK   rI  Ä
  r|  zRunTarget.get_generated_sourcesr—   c                 C  r²  r    rG   r¦   rG   rG   rK   rª   Ç
  r|  zRunTarget.get_sourcesc                 C  r¯  r°  rG   r¦   rG   rG   rK   r³  Ê
  r|  zRunTarget.should_installc                 C  r¥   r    r„  r¦   rG   rG   rK   rA  Í
  r¨   zRunTarget.get_filenamer½   c                 C  s.   t | jtƒr
| jgS t | jtƒr| jS tdƒ‚)NzBRunTarget: self.name is neither a list nor a string. This is a bug)rã   r†   r   ré   ÚRuntimeErrorr¦   rG   rG   rK   r?  Ð
  s
   zRunTarget.get_outputsc                 C  r¯  )Nz@runrG   r¦   rG   rG   rK   ra  Ø
  r|  zRunTarget.type_suffixrø  )r†   r   r!  rN  r   rO  rž   r   r   r   r   rÈ   r  rP  rQ  r“   r+  )r{   r  r  r°   r[  r,  )rŒ   r   rŽ   r_  rà   r#  rF  rI  rª   r³  rA  r?  ra  r†  rG   rG   r×  rK   rL  ¨
  s    ù






rL  c                      s*   e Zd ZdZd‡ fd
d„Zdd„ Z‡  ZS )ÚAliasTargetÚaliasr†   r   r   úT.Sequence['Target']rž   r   r   rÈ   c                   s   t ƒ  |g ||||¡ d S r    )r¿  rà   )r¢   r†   r   rž   r   r   r×  rG   rK   rà   ß
  s   zAliasTarget.__init__c                 C  s   d}|  | jj|  ¡ ¡S )Nz	<{0} {1}>)r  r   rŒ   rp  rÞ  rG   rG   rK   r#  ã
  s   zAliasTarget.__repr__)
r†   r   r   rU  rž   r   r   r   r   rÈ   )rŒ   r   rŽ   r_  rà   r#  r†  rG   rG   r×  rK   rS  Û
  s    rS  c                      sj   e Zd ZeZdZd%‡ fdd„Zdd„ Zdd„ Zdd„ Z	d&dd„Z
dd„ Zdd„ Zd d!„ Zd'd#d$„Z‡  ZS )(ÚJarZjarr†   r   rž   r   rò   r   rl   úT.List[SourceOutputs]r»  úT.Optional['StructuredSources']r   rÈ   rC  r¾  c                   s®   t ƒ  |||||||||	|
¡
 | jD ]}| d¡s!td|› dƒ‚q| jD ]}t|tƒs4td|› dƒ‚q%| jr<tdƒ‚| j	d | _
| j
g| _|
 dg ¡| _|
 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.jarÚ	java_argsrw   )r¿  rà   rl   r4  r‹   rÃ  rã   rV  r»  r†   rÈ  rÉ  r  rY  rw   )r¢   r†   rž   r   rò   rl   r»  r_   r   rC  r™  r=  rä   r×  rG   rK   rà   ì
  s"   ÿ

ÿ

ÿ
zJar.__init__c                 C  r¥   r    )rv   r¦   rG   rG   rK   Úget_main_classÿ
  r¨   zJar.get_main_classc                 C  r¯  )Nz@jarrG   r¦   rG   rG   rK   ra    r|  zJar.type_suffixc                 C  r¥   r    )rY  r¦   rG   rG   rK   Úget_java_args  r¨   zJar.get_java_argsr{   r¼  c                 C  r¥   r    )rw   r¦   rG   rG   rK   Úget_java_resources  r¨   zJar.get_java_resourcesc                 C  r^  r    rG   r¦   rG   rG   rK   rÔ    r`  zJar.validate_installc                 C  r¯  rø  rG   r¦   rG   rG   rK   r±    r|  zJar.is_linkable_targetc                 C  s4   dd„ | j D ƒ}tj |¡}|rdtj |¡gS g S )Nc                 S  s"   g | ]}t j | ¡ | ¡ ¡‘qS rG   )r)  r·   rˆ   r‡  rA  rÁ   rG   rG   rK   rÃ     s   " z*Jar.get_classpath_args.<locals>.<listcomp>z-cp)rÃ  r)  Úpathseprˆ   )r¢   Zcp_pathsZ	cp_stringrG   rG   rK   Úget_classpath_args  s
   zJar.get_classpath_argsrw  c                 C  r  )Nz{jardir})r   Zget_jar_dirr¦   rG   rG   rK   r{    r  zJar.get_default_install_dir)r†   r   rž   r   r   r   rò   r   rl   rW  r»  rX  r   rÈ   rC  r¾  )r{   r¼  r´  )rŒ   r   rŽ   Úknown_jar_kwargsrå  r_  rà   rZ  ra  r[  r\  rÔ  r±  r^  r{  r†  rG   rG   r×  rK   rV  ç
  s    
rV  c                   @  sÎ   e Zd ZU dZdZded< ded< ded< d3dd„Zed4dd„ƒZdd„ Z	d5dd„Z
d4dd„Zd4dd„Zd4dd„Zdd„ Zd6dd„Zd7d!d"„Zd8d$d%„Zd8d&d'„Zd8d(d)„Zd8d*d+„Zd9d-d.„Zd:d0d1„Zd2S );r=   züA 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                 C  s   | j j| _d S r    )r-  rò   r¦   rG   rG   rK   r6  *  r  zCustomTargetIndex.__post_init__c                 C  s   | j j› d| j› dS )Nú[ú])r-  r†   rŽ  r¦   rG   rG   rK   r†   -  s   zCustomTargetIndex.namec                 C  s   d  | j| j¡S )Nz<CustomTargetIndex: {!r}[{}]>)r  r-  rŽ  r¦   rG   rG   rK   r#  1  r@  zCustomTargetIndex.__repr__r½   c                 C  s   | j gS r    ©rŽ  r¦   rG   rG   rK   r?  4  rá  zCustomTargetIndex.get_outputsc                 C  ó
   | j  ¡ S r    )r-  r‡  r¦   rG   rG   rK   r‡  7  r¤   zCustomTargetIndex.get_subdirc                 C  r¥   r    rb  r¦   rG   rG   rK   rA  :  r¨   zCustomTargetIndex.get_filenamec                 C  rc  r    )r-  rp  r¦   rG   rG   rK   rp  =  r¤   zCustomTargetIndex.get_idc                 C  rc  r    )r-  r  r¦   rG   rG   rK   r  @  r¤   z#CustomTargetIndex.get_all_link_depsr…   r  c                 C  s   | j  |¡S r    )r-  r  r  rG   rG   rK   r  C  s   z'CustomTargetIndex.get_link_deps_mappingr  c                 C  rc  r    )r-  r  r¦   rG   rG   rK   r  F  r¤   z&CustomTargetIndex.get_link_dep_subdirsr“   c                 C  s   | j  | j¡S r    )r-  r6  rŽ  r¦   rG   rG   rK   r±  I  r  z$CustomTargetIndex.is_linkable_targetc                 C  s   t j | j¡d }|dvS )r7  r8  r9  )r)  r·   rœ  rŽ  r:  rG   rG   rK   r`  L  s   z#CustomTargetIndex.links_dynamicallyc                 C  rc  r    )r-  r³  r¦   rG   rG   rK   r³  V  r¤   z CustomTargetIndex.should_installc                 C  s$   t j | j¡d }|dv o|  ¡  S )zH
        Returns True if this is a not installed static library
        r8  r9  )r)  r·   rœ  rŽ  r³  r:  rG   rG   rK   rT  Y  s   zCustomTargetIndex.is_internalrb  c                 C  rc  r    )r-  ra  r¦   rG   rG   rK   ra  `  r¤   z-CustomTargetIndex.extract_all_objects_recurser}  c                 C  rc  r    )r-  r¬   r¦   rG   rG   rK   r¬   c  r¤   z(CustomTargetIndex.get_custom_install_dirNrH  r+  r,  r~  r  r[  r‚  rµ  )rŒ   r   rŽ   r  r_  r•   r6  r…  r†   r#  r?  r‡  rA  rp  r  r  r  r±  r`  r³  rT  ra  r¬   rG   rG   rG   rK   r=     s,   
 












r=   c                      sT   e Zd Z	dd‡ fdd„Zddd	„Zddd„Zddd„Zddd„Zddd„Z‡  Z	S )ÚConfigurationDataNÚinitial_valuesúyT.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                   s0   t ƒ  ¡  |rdd„ | ¡ D ƒni | _d| _d S )Nc                 S  s(   i | ]\}}|t |tƒr|n|d f“qS r    )rã   Útuplerg  rG   rG   rK   rh  m  s   ( z.ConfigurationData.__init__.<locals>.<dictcomp>F)r¿  rà   râ   rD  Úused)r¢   re  r×  rG   rK   rà   g  s   
ÿ
zConfigurationData.__init__r{   r   c                 C  rO  r    )r  rD  r¦   rG   rG   rK   r#  p  r¤   zConfigurationData.__repr__r§  r“   c                 C  s
   || j v S r    ©rD  r;  rG   rG   rK   Ú__contains__s  r¤   zConfigurationData.__contains__c                 C  rO  r    )r“   rD  r¦   rG   rG   rK   rP  v  r¤   zConfigurationData.__bool__r†   ú1T.Tuple[T.Union[str, int, bool], T.Optional[str]]c                 C  rÌ  r    ri  )r¢   r†   rG   rG   rK   r  y  r¤   zConfigurationData.getúT.Iterator[str]c                 C  rc  r    )rD  r  r¦   rG   rG   rK   r  |  r¤   zConfigurationData.keysr    )re  rf  r+  )r§  r   r{   r“   r[  )r†   r   r{   rk  )r{   rl  )
rŒ   r   rŽ   rà   r#  rj  rP  r  r  r†  rG   rG   r×  rK   rd  f  s    ý
	


rd  c                   @  sd   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dd„Zd	S )ÚDatar—   rl   r   r`   r¹   r›   rb   r   Nr½   Úrenamer˜   rc   Ú	data_typer{   rŸ   c                 C  s$   | j d u rdd„ | jD ƒ| _ d S d S )Nc                 S  s   g | ]	}t j |j¡‘qS rG   )r)  r·   r™  r/  r°  rG   rG   rK   rÃ   Ž  r>  z&Data.__post_init__.<locals>.<listcomp>)rn  rl   r¦   rG   rG   rK   r6  Œ  s   
ÿzData.__post_init__rH  )rŒ   r   rŽ   r•   rn  rc   ro  r6  rG   rG   rG   rK   rm    s   
 rm  c                   @  sD   e Zd ZU ded< ded< ded< ded< dZded< ddd„ZdS )ÚSymlinkDatar   r-  r†   r`   r   Nr˜   rc   r{   rŸ   c                 C  s*   | 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¦   rG   rG   rK   r6  ˜  s   ÿzSymlinkData.__post_init__rH  )rŒ   r   rŽ   r•   rc   r6  rG   rG   rG   rK   rp    s   
 rp  c                   @  s6   e Zd ZU ded< ded< ded< ded< ded	< d
S )Ú	TestSetupr½   Zexe_wrapperr“   Zgdbrz   Ztimeout_multiplierr#   r  Zexclude_suitesN)rŒ   r   rŽ   r•   rG   rG   rG   rK   rq    s   
 rq  c                 C  s†   g }| D ]<}t |tƒr| |¡ qt |ttttfƒr!|| ¡ 7 }qt |tƒr.|| 	|¡7 }qt |t
ƒr:| |j¡ q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‡   rA   r<   r=   r>   r?  rB   Zdetermine_ext_objsr   r/  ru  )rl   r   Únamesr=  rG   rG   rK   r+  ¥  s   


r+  r³  c                 C  sP   t j | dd¡}zt|dtƒ}t | ¡|j_|W S  ty'   t	d|›dƒ‚w )Nzmeson-privatez	build.datz
Build datazNo such build data file as r‚   )
r)  r·   rˆ   r$   rÇ   r
   Úloadr   ÚFileNotFoundErrorr   )r³  rÈ  ÚbrG   rG   rK   rs  ¸  s   ÿrs  ÚobjrÈ  rŸ   c                 C  sn   | j j}d | j _z)t|dƒ}t | |¡ W d   ƒ n1 sw   Y  W || j _d S W || j _d S || j _w )NÚwb)r   r
   ÚopenÚpickleÚdump)rv  rÈ  ZcdatarY  rG   rG   rK   ÚsaveÃ  s   ÿýr{  )rc   rx   ry   rz   r{   r|   r+  )r³  r   r{   rÇ   )rv  rÇ   rÈ  r   r{   rŸ   )‹Ú
__future__r   Úcollectionsr   r   Údataclassesr   r   r   Ú	functoolsr   r¶  rë   rŽ  rT  rô  r)  ry  r9  rk  Útypingr¥  r„   r
   r   r   r   r   Zmesonlibr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   rC  r%   r&   r'   r(   r)   r*   Zinterpreterbaser+   r,   ÚTYPE_CHECKINGÚtyping_extensionsr-   Z_typingr.   Zbackend.backendsr/   r0   r1   Zinterpreter.interpreterr2   r3   r4   r5   Zlinkersr6   r7   r8   rß   r9   Zmparserr:   Úwrapr;   ÚUnionrC   ZLibTypesZBuildTargetTypesr   ZObjectTypesZ
pch_kwargsZlang_arg_kwargsZvala_kwargsZrust_kwargsZ	cs_kwargsZbuildtarget_kwargsr„  rí  r  r  rù  r_  r~   rŠ   r‹   r   r–   r²   r¶   r¸   r¼   rÇ   r  rB   rK  ÚABCMetar\  rA   r‡  r>   r*  r@   r?   r{  r  r  r<   rE  rL  rS  rV  r=   rd  rm  rp  rq  r+  rs  r{  rG   rG   rG   rK   Ú<module>   sü   \ 


ÿþýüûÿ

 '
50 ;       KMC T  ]& J835I
