
    <hC=                      S SK Jr  S SKJrJrJr  S SKJrJr  S SK	J
r
  S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrSSKJr  SSKJr  SS	KJr  SS
KJr  SSKJrJrJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&J'r'J(r(J)r)J*r*J+r+J,r,J-r-J.r.J/r/J0r0J1r1  SSK2J3r3  SSK4J5r5J6r6J7r7J8r8J9r9J:r:J;r;J<r<J=r=  SSK>J?r?J@r@JArA  \R                  (       a  S SKCJDrDJErE  SSKJFrF  SSKGJHrH  SSKIJJrJ  SSK4JKrK  SSKLJMrMJNrN  SSKOJPrPJQrQ  SSK>JRrR  SSKSJTrT  SSKJUrUJVrVJWrW  SSKXJYrY  SSKZJ[r[  \R                  S   r]\R                  S   r^\R                  S   r_\R                  \`SSS 4   ra " S! S"\E5      rbS#S$1rc\: V s1 s H  o  S%3iM	     sn rd\d1 S&k-  rd1 S'kreS(S)1rfS*S+1rgS,S-1rh1 S.kri\i\d-  \c-  \e-  \f-  \g-  \h-  rj\j1 S/k-  rk\j1 S0k-  rl\jS1S21-  rm\j1 S3k-  rn\kS4S51-  ro    SS6 jrp\
" SS79SS8 j5       rq " S9 S:\5      rr\" S;S<9 " S= S>\5      5       rs\" S;S<9 " S? S@\5      5       rt\" S;S<9 " SA SB\5      5       ru\" S;S<9 " SC SD\5      5       rv\" S;S<9 " SE SF\5      5       rw\" S;S<9 " SG SH5      5       rx " SI SJ5      ry\" S;S<9 " SK SL\5      5       rz\" S;S<9 " SM S\5      5       r{\" S;S;SN9 " SO SP\5      5       r|\" S;S<9 " SQ SR\\R                  SS95       r~ " ST SU\~5      r " SV SW5      r " SX SY5      r " SZ S[\5      r\" S;S<9 " S\ S]\5      5       r " S^ S_\5      r " S` Sa\5      r " Sb Sc\5      r " Sd Se\5      r " Sf Sg\5      r " Sh Si5      r " Sj Sk5      r " Sl Sm\~\\5      r " Sn So\5      r " Sp Sq\~\5      r " Sr Ss\5      r " St Su\5      r\" S;S<9 " Sv Sw\\5      5       r " Sx Sy\5      r " Sz S{\5      r\" S;S<9 " S| S}\5      5       r\" S;S<9 " S~ S\5      5       r\" S;S<9 " S S5      5       rS rSS jrSS jrgs  sn f )    )annotations)defaultdictdequeOrderedDict)	dataclassfield)	lru_cacheN   )coredatadependencies)mlog)programs)HoldableObjectSecondLevelHolderFileMesonExceptionMachineChoice
PerMachine
OrderedSetlistifyextract_as_listtypeslistifystringlistifyclassify_unity_sourcesget_filenames_templates_dictsubstitute_valueshas_path_sepis_parent_pathrelpathPerMachineDefaultableMesonBugExceptionEnvironmentVariablespickle_loadlazy_property)	OptionKey)		is_header	is_object	is_sourceclink_langs
sort_clinkall_languagesis_known_suffixdetect_static_linkerLANGUAGES_USING_LDFLAGS)
FeatureNewFeatureDeprecatedUnknownValue)Literal	TypedDict)environment)ImmutableListProtocol)Backend)Compiler)SourceOutputsInterpreter)TestDoctest)
SubProject)StaticLinker)ExecutableSerialisationFileModeFileOrString)ModuleState)BaseNode)CustomTargetCustomTargetIndexGeneratedList)SharedLibraryStaticLibraryrD   rE   )BuildTargetrD   rE   r   ExtractedObjectsGeneratedTypesc                  >    \ rS rSr% S\S'   S\S'   S\S'   S\S'   S	rg
)	DFeatures:   boolunittestzT.List[T.Union[str, int]]debugT.List[IncludeDirs]import_dirsversions N__name__
__module____qualname____firstlineno____annotations____static_attributes__rU       q/mnt/mint/home/seanl/mnt/public/Repos/ladybird/Build/vcpkg/downloads/tools/meson-1.9.0-d1fcc2/mesonbuild/build.pyrM   rM   :   s    ((((++r]   rM   c_pchcpp_pch_args>   d_debug
d_unittestd_import_dirsd_module_versions>   vala_gir	vala_vapivala_headerrust_crate_typerust_dependency_map	resourcescs_argsswift_interoperability_modeswift_module_name>   nativegui_appinstallobjectssources	link_args	link_with
link_wholebuild_rpathextra_filesinstall_dirinstall_tagname_prefixname_suffixr   install_modelink_dependsinstall_rpathlink_languagewin_subsystembuild_by_defaultoverride_optionsinclude_directoriesgnu_symbol_visibilityimplicit_include_directories>   pieimplibexport_dynamicvs_module_defsandroid_exe_type>   versionrust_abi	soversionr   darwin_versionsr   r   >   picprelinkr   
main_classjava_resourcesc                R    U (       d  S /U-  nU$ [        U 5      S:X  a  X-  nU$ U nU$ )Nr
   )len)rz   num_outputs_install_tags      r^   _process_install_tagr   {   sG     v+
 	 
[	Q	"0  #r]   maxsizec                    SU R                   U R                  /nU R                  b  UR                  SU R                  -   5        UR                  S5        SR	                  U5      $ )Nz@rpath/..dylib )prefixnamer   appendjoin)ldr   s     r^   #get_target_macos_dylib_install_namer      sO    ryy"''*D	||C",,&'KK774=r]   c                      \ rS rSrSrg)InvalidArguments   rU   N)rW   rX   rY   rZ   r\   rU   r]   r^   r   r      s    r]   r   F)eqc                  8    \ rS rSr% S\S'   S\S'   SrS\S'   S	rg
)DependencyOverride   zdependencies.Dependencydepz
'BaseNode'nodeTrO   explicitrU   N)rW   rX   rY   rZ   r[   r   r\   rU   r]   r^   r   r      s    	  
Hdr]   r   c                      \ rS rSr% S\S'   S\S'   S\S'   S\S'   S	\S
'   SrS\S'   SS jrSS jrSS jrSS jr	SS jr
Srg)Headers   T.List[File]rs   T.Optional[str]install_subdircustom_install_dir
'FileMode'custom_install_modestr
subprojectNT.Optional[bool]follow_symlinksc                    Xl         g Nr   )selfsubdirs     r^   set_install_subdirHeaders.set_install_subdir   s    $r]   c                    U R                   $ r   r   r   s    r^   get_install_subdirHeaders.get_install_subdir       """r]   c                    U R                   $ r   rs   r   s    r^   get_sourcesHeaders.get_sources       ||r]   c                    U R                   $ r   r   r   s    r^   get_custom_install_dirHeaders.get_custom_install_dir       &&&r]   c                    U R                   $ r   r   r   s    r^   get_custom_install_modeHeaders.get_custom_install_mode       '''r]   r   )r   r   returnNoner   r   r   r   r   r   )rW   rX   rY   rZ   r[   r   r   r   r   r   r   r\   rU   r]   r^   r   r      sC    ##''##O(,O%,
%#'(r]   r   c                  f    \ rS rSr% S\S'   S\S'   S\S'   S\S	'   S\S
'   SS jrSS jrSS jrSrg)Man   r   rs   r   r   r   r   r   r   localec                    U R                   $ r   r   r   s    r^   r   Man.get_custom_install_dir   r   r]   c                    U R                   $ r   r   r   s    r^   r   Man.get_custom_install_mode   r   r]   c                    U R                   $ r   r   r   s    r^   r   Man.get_sources   r   r]   rU   Nr   r   )r   zT.List['File'])	rW   rX   rY   rZ   r[   r   r   r   r\   rU   r]   r^   r   r      s.    ''##O'(r]   r   c                  B    \ rS rSr% S\S'   S\S'   S\S'   SrS\S	'   S
rg)EmptyDir   r   pathr   r}   r   Nr   rz   rU   )rW   rX   rY   rZ   r[   rz   r\   rU   r]   r^   r   r      s    
IO#'K'r]   r   c                      \ rS rSr% S\S'   S\S'   S\S'   S\S'   S\S'   S	\S
'   S\S'   S\S'   SrS\S'   SrS\S'   SrS\S'   Srg)
InstallDir   r   source_subdirinstallable_subdirry   install_dir_namer   r}   zT.Tuple[T.Set[str], T.Set[str]]excluderO   strip_directoryr   Tfrom_source_dirNr   rz   r   r   rU   )	rW   rX   rY   rZ   r[   r   rz   r   r\   rU   r]   r^   r   r      sP    ,,O OT #'K'(,O%,r]   r   c                  R    \ rS rSr% S\S'   S\S'   S\S'   S\S'   SS	 jrSS
 jrSrg)DepManifest   r   r   T.List[str]licensezT.List[T.Tuple[str, File]]license_filesr   c           	     |   / nU R                    H  u  p#[        R                  R                  " S [        R
                  " [        R                  R                  UR                  5      5      R                   5       6 nUR                  U[        R                  R                  UR                  U5      45        M     U$ )Nc              3  4   #    U  H  oS :w  d  M
  Uv   M     g7f)z..NrU   ).0xs     r^   	<genexpr>.DepManifest.license_mapping.<locals>.<genexpr>   s     "p.bkofo11.bs   		)r   osr   r   pathlibPurePathnormpathfnamepartsr   r   )r   ret	ifilenamer   r  s        r^   license_mappingDepManifest.license_mapping   s    #11OIGGLL"pg.>.>rww?O?OPTPZPZ?[.\.b.b"pqEJJ	277<<U#CDE  2 
r]   c                    U R                   U R                  U R                  5        Vs/ s H  oS   PM	     snS.$ s  snf )Nr
   )r   r   r   )r   r   r  )r   ls     r^   to_jsonDepManifest.to_json   s?    ||||,0,@,@,BC,Bqd,BC
 	
 Ds   <rU   N)r   zT.List[T.Tuple[str, str]])r   z&T.Dict[str, T.Union[str, T.List[str]]])rW   rX   rY   rZ   r[   r  r  r\   rU   r]   r^   r   r      s"    L--O
r]   r   c                      \ rS rSrSrSS jrS rS rSS jrSS jr	SS jr
S	 rS
 rSS jrSS jrSS jrS S jrS!S jrS"S jrS#S jrS$S jrS%S jrS&S jrS'S jrS&S jrS'S jrSrg)(Build   zQA class that holds the status of one build including
all dependencies and so on.
c                
   [         R                  U l        SU l        S U l        Xl        0 U l        [        5       U l        [        5       U l	        [        0 0 5      U l        [        0 0 5      U l        [        0 0 5      U l        [        0 0 5      U l        / U l        / U l        / U l        / U l        / U l        / U l        / U l        [        S S 5      U l        0 U l        SU l        / U l        / U l        / U l        / U l        S U l        0 U l        [        0 0 5      U l        0 U l         S U l!        0 U l"        [        5       U l#        [H        RJ                  " URL                  " 5       0 0 5      U l'        / U l(        [        5       U l)        g )Nzname of master projectr   )*r   r   project_nameproject_versionr5   projectsr   targetssettargetnamesr   global_argsglobal_link_argsprojects_argsprojects_link_argstests
benchmarksheadersmanemptydirdatasymlinksstatic_linkersubprojectssubproject_dirinstall_scriptspostconf_scriptsdist_scriptsinstall_dirsdep_manifest_namedep_manifeststdlibstest_setupstest_setup_default_namefind_overridessearched_programsr!   defaultis_cross_builddependency_overridesdevenvmodules)r   r5   s     r^   __init__Build.__init__   st   ''404&Q\Q^58UAKBPRASFPQSUWFXPZ[]_aPbU_`bdfUg%'
*,(* "*,"$	-/7A$7M BDCE?A022668!"b)35'+$ A-0U VkUrUr&&("bV2!46#&5	r]   c                    [        5       nU R                  R                  5        H   u  p#[        U[        5      (       d  M  X1U'   M"     U$ r   )r   r  items
isinstancerI   )r   build_targetsr   ts       r^   get_build_targetsBuild.get_build_targets&  s?    #||))+GD![))&'d# , r]   c                    [        5       nU R                  R                  5        H   u  p#[        U[        5      (       d  M  X1U'   M"     U$ r   )r   r  r8  r9  rD   )r   custom_targetsr   r;  s       r^   get_custom_targetsBuild.get_custom_targets-  s?    $||))+GD!\**'(t$ , r]   c                   [        U R                  5      nU R                  R                  5        HW  u  p#[	        U[
        [        [        [        45      (       a  UR                  5       UR                  U'   MI  X1R                  U'   MY     U$ r   )
r  r5   __dict__r8  r9  listdictr  r   copyr   otherkvs       r^   rF  
Build.copy4  sh    d&&'MM'')DA!dD#{;<<$%FFHq!$%q!	 *
 r]   c                f    UR                   R                  5        H  u  p#X0R                   U'   M     g r   )rC  r8  rG  s       r^   mergeBuild.merge=  s'    NN((*DA MM! +r]   c                    U R                   UR                     cD  UR                  5       (       a.  [        U R                  U5      U R                   UR                  '   g g g r   )r"  for_machineneeds_static_linkerr.   r5   )r   compilers     r^   ensure_static_linkerBuild.ensure_static_linkerA  sU    h223;@\@\@^@^7KDL\L\^f7gDx334 A_;r]   c                     U R                   S   $ )Nr   )r  r   s    r^   get_projectBuild.get_projectE  s    }}R  r]   c                    U R                   $ r   )r$  r   s    r^   get_subproject_dirBuild.get_subproject_dirH  r   r]   c                    U R                   $ r   )r  r   s    r^   get_targetsBuild.get_targetsK  r   r]   c                    U R                   $ r   )r  r   s    r^   	get_testsBuild.get_testsN      zzr]   c                    U R                   $ r   )r  r   s    r^   get_benchmarksBuild.get_benchmarksQ      r]   c                    U R                   $ r   )r  r   s    r^   get_headersBuild.get_headersT  r   r]   c                    U R                   $ r   )r  r   s    r^   get_manBuild.get_manW      xxr]   c                    U R                   $ r   )r   r   s    r^   get_dataBuild.get_dataZ      yyr]   c                    U R                   $ r   )r!  r   s    r^   get_symlinksBuild.get_symlinks]      }}r]   c                    U R                   $ r   )r  r   s    r^   get_emptydirBuild.get_emptydir`  rt  r]   c                    U R                   $ r   )r(  r   s    r^   get_install_subdirsBuild.get_install_subdirsc         r]   c                `    U R                   U   nUR                  UR                  5       / 5      $ r   )r  getget_languager   rR  rP  ds       r^   get_global_argsBuild.get_global_argsf  s,    [)uuX**,b11r]   c                    U R                   U   nUR                  U5      nU(       d  / $ UR                  UR                  5       / 5      $ r   )r  r}  r~  )r   rR  projectrP  r  argss         r^   get_project_argsBuild.get_project_argsj  sA    {+uuW~Ixx--/44r]   c                `    U R                   U   nUR                  UR                  5       / 5      $ r   )r  r}  r~  r  s       r^   get_global_link_argsBuild.get_global_link_argsq  s,    !!+.uuX**,b11r]   c                    U R                   U   nUR                  U5      nU(       d  / $ UR                  UR                  5       / 5      $ r   )r  r}  r~  )r   rR  r  rP  r  rt   s         r^   get_project_link_argsBuild.get_project_link_argsu  sA    ##K0EE'N	I}}X224b99r]   )#r  r   r*  r)  r2  r3  r'  r  r5   r.  r  r  r  r(  r%  r  r4  r&  r  r  r  r  r  r/  r"  r+  r$  r#  r!  r  r  r-  r,  r  r   N)r5   environment.Environment)r   r  )rH  r  r   r   )rR  r8   r   r   )r   z8'T.OrderedDict[str, T.Union[CustomTarget, BuildTarget]]')r   zT.List['Test'])r   zT.List['Headers'])r   zT.List['Man'])r   zT.List['Data'])r   zT.List['SymlinkData'])r   zT.List['EmptyDir'])r   zT.List['InstallDir'])rR  
'Compiler'rP  'MachineChoice'r   r   )rR  r  r  r   rP  r  r   r   )rW   rX   rY   rZ   __doc__r5  r<  r@  rF  rM  rS  rV  rY  r\  r_  rc  rg  rj  rn  rr  rv  ry  r  r  r  r  r\   rU   r]   r^   r  r     sr    +Z!h!#!252:r]   r  c                      \ rS rSr% SrS\S'   S\S'   S\S'   \" \S	9rS\S
'   SS jr	SS jr
SS jrSS jrSS jrSrg)IncludeDirsi~  z7Internal representation of an include_directories call.r   curdirr   incdirsrO   	is_systemdefault_factoryextra_build_dirsc                |    SnUR                  U R                  R                  U R                  U R                  5      $ )Nz
<{} {}/{}>)format	__class__rW   r  r  r   rs     r^   __repr__IncludeDirs.__repr__  s,    xx//dllKKr]   c                    U R                   $ r   )r  r   s    r^   
get_curdirIncludeDirs.get_curdir      {{r]   c                    U R                   $ r   )r  r   s    r^   get_incdirsIncludeDirs.get_incdirs  r   r]   c                    U R                   $ r   )r  r   s    r^   get_extra_build_dirs IncludeDirs.get_extra_build_dirs  s    $$$r]   c                   / nU R                    Hu  nUR                  [        R                  R	                  XR
                  U5      5        UR                  [        R                  R	                  X R
                  U5      5        Mw     U$ )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   r   r   r   r  )r   	sourcedirbuilddirstrlistidirs        r^   to_string_listIncludeDirs.to_string_list  s\      "LLDNN277<<	;;EFNN277<<++tDE ! r]   rU   Nr   r   r   r   )r  r   r  r   r   r   )rW   rX   rY   rZ   r  r[   r   rD  r  r  r  r  r  r  r\   rU   r]   r^   r  r  ~  sD     BKO %*$$?k?L%r]   r  c                      \ rS rSr% SrS\S'   \" \S9rS\S'   \" \S9r	S\S	'   \" \S9r
S
\S'   SrS\S'   SrS\S'   SS jr\SS j5       rSS jrSS jrSrg)rJ   i  zA
Holds a list of sources for which the objects must be extracted
z'BuildTarget'targetr  r   srclistT.List['GeneratedTypes']genlist0T.List[T.Union[str, 'File', 'ExtractedObjects']]objlistTrO   	recursiveFpchc                    SnUR                  U R                  R                  U R                  R                  U R
                  5      $ )Nz<{0} {1!r}: {2}>)r  r  rW   r  r   r  r  s     r^   r  ExtractedObjects.__repr__  s2    xx//1A1A4<<PPr]   c                    [        U 5      n U H+  nUR                  5        H  nU R                  U5        M     M-     U  Vs/ s H  n[        U5      (       d  M  UPM     sn$ s  snf r   )rD  get_outputsr   r)   )rs   generated_sourcesgensrcss       r^   r   ExtractedObjects.get_sources  sX     w-'F'') q!	 * ( #37ail7333s   A"A"c                    U R                  X5      n[        U R                  R                  R	                  5       U5      $ r   )r   r   r  	compilersvalues)r   rs   r  sources_s       r^   classify_all_sources%ExtractedObjects.classify_all_sources  s2    ##G?%dkk&;&;&B&B&DhOOr]   c                @   U R                  U R                  R                  U R                  R                  5      nU R                  U R                  U R
                  5      nUR                  5        H*  u  p4[        U5      [        X   5      :w  d  M!  [        S5      e   g )Nz}Single object files cannot be extracted in Unity builds. You can only extract all the object files for each compiler at once.)	r  r  rs   	generatedr  r  r8  r  r   )r   cmpsrcsextracted_cmpsrcscompsrcss        r^   check_unity_compatible'ExtractedObjects.check_unity_compatible  s     ++DKK,?,?AVAVW 55dllDLLQ+113JD4yC..$ &S T T 4r]   rU   Nr  )rs   zT.Sequence['FileOrString']r  T.Sequence['GeneratedTypes']r   T.List['FileOrString'])rs   zT.List[FileOrString]r  r  r   z*T.Dict['Compiler', T.List['FileOrString']]r   r   )rW   rX   rY   rZ   r  r[   r   rD  r  r  r  r  r  r  staticmethodr   r  r  r\   rU   r]   r^   rJ   rJ     sy     !$7G\7(-d(CG%C@EVZ@[G=[ItCQ 4 4PTr]   )r   orderc                  d    \ rS rSr% Sr\" S S9rS\S'   SS jrSS jr	SS	 jr
SS
 jrSS jrSrg)StructuredSourcesi  a   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                      [        [        5      $ r   )r   rD  rU   r]   r^   <lambda>StructuredSources.<lambda>  s	    D 1r]   r  zYT.DefaultDict[str, T.List[T.Union[File, CustomTarget, CustomTargetIndex, GeneratedList]]]rs   c                    U R                   R                  5       nUR                   R                  5        H  u  p4X#   R                  U5        M     [	        U5      $ r   )rs   rF  r8  extendr  )r   rH  rs   rI  rJ  s        r^   __add__StructuredSources.__add__  sH    ,,##%MM'')DAJa  * ))r]   c                ,    [        U R                  5      $ r   )rO   rs   r   s    r^   __bool__StructuredSources.__bool__  s    DLL!!r]   c                &    U R                   S   S   $ )zHGet the first source in the root

:return: The first source in the root
r   r   r   r   s    r^   
first_fileStructuredSources.first_file  s    
 ||B""r]   c                    [        [        R                  R                  U R                  R                  5       5      5      $ r   )rD  	itertoolschainfrom_iterablers   r  r   s    r^   as_listStructuredSources.as_list  s)    IOO11$,,2E2E2GHIIr]   c                    U R                   R                  5        H8  nU H/  n[        U[        5      (       a  UR                  (       a      gM.      g   M:     g)zDo 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)rs   r  r9  r   is_built)r   filesfs      r^   
needs_copyStructuredSources.needs_copy  sK     \\((*Ea&&zz# "    + r]   rU   N)rH  r  r   r  r   rO   )r   z=T.Union[File, CustomTarget, CustomTargetIndex, GeneratedList])r   zET.List[T.Union[File, CustomTarget, CustomTargetIndex, GeneratedList]])rW   rX   rY   rZ   r  r   rs   r[   r  r  r  r  r  r\   rU   r]   r^   r  r    s;     jo1j3Gf 3*"#Jr]   r  c                     \ rS rSr% S\S'   S\S'   S\S'   S\S'   S	\S
'   S\S'   SrS\S'   SrS\S'   \" \S9r	S\S'   \
R                  S+S j5       r\
R                  S+S j5       rS,S jrS-S jrS-S jrS-S jrS-S jrS.S jrS/S jrS0S jrS+S jrS+S jrS+S jr\S1S  j5       r\S2S! j5       r\S+S" j5       rS+S# jrS3S$ jr S4S% jr!S5S& jr"S6S' jr#S5S( jr$S)r%g*)7Targeti	  r   r   r   z'SubProject'r   rO   r   r   rP  r  r5   Frq   build_always_staler  r   rx   c                    g r   rU   r   s    r^   typenameTarget.typename      r]   c                    g r   rU   r   s    r^   type_suffixTarget.type_suffix  r  r]   c                    [        U R                  5      (       a9  [        R                  " [        R
                  " SU R                   S35      5        g g )Nz                Target "z" has a path separator in its name.
                This is not supported, it can cause unexpected failures and will become
                a hard error in the future.)r   r   r   warningtextwrapdedentr   s    r^   __post_init__Target.__post_init__  sE    		""LL . $,*/ 0 1 #r]   c                z    [        U[        5      (       d  [        $ U R                  5       UR                  5       :  $ r   r9  r  NotImplementedget_idr   rH  s     r^   __lt__Target.__lt__(  ,    %((!!{{}u||~--r]   c                z    [        U[        5      (       d  [        $ U R                  5       UR                  5       :*  $ r   r  r  s     r^   __le__Target.__le__-  ,    %((!!{{}..r]   c                z    [        U[        5      (       d  [        $ U R                  5       UR                  5       :  $ r   r  r  s     r^   __gt__Target.__gt__2  r  r]   c                z    [        U[        5      (       d  [        $ U R                  5       UR                  5       :  $ r   r  r  s     r^   __ge__Target.__ge__7  r  r]   c                    [         er   NotImplementedErrorr   s    r^   get_default_install_dirTarget.get_default_install_dir<      !!r]   c                    [         er   r  r   s    r^   r   Target.get_custom_install_dir?  r  r]   c                   U R                  5       u  pU R                  5       nU(       a1  US   U:w  a(  US   SLa   SnU Vs/ s H  n[        USS 5      PM     nnO SnU(       a  XS'   OU/nU/[        U5      -  nX6U4$ s  snf )Nr   ToptnameF)r  r   getattrr   )r   default_install_dirdefault_install_dir_nameoutdirsr   iinstall_dir_namess          r^   get_install_dirTarget.get_install_dirB  s    8<8T8T8V58<8S8S8Uwqz%88WQZt=S "&FM NgIt!<g N!& 0
./!9 :S\ I+=== !Os   A?c                    U R                   $ r   r   r   s    r^   get_basenameTarget.get_basenameY  rp  r]   c                    U R                   $ r   r   r   s    r^   
get_subdirTarget.get_subdir\  r  r]   c                    U R                   $ r   )r  r   s    r^   get_typenameTarget.get_typename_  rt  r]   c                    [         R                  " 5       nUR                  U R                  SSS95        UR	                  5       S S $ )Nutf-8replace)encodingerrors   )hashlibsha256updateencode	hexdigest)	target_idhs     r^   _get_id_hashTarget._get_id_hashb  sA     NN	!!79!EF {{}Ra  r]   c                    UR                  SS5      R                  SS5      n[        U5      (       a   eX2-   nU (       a  [        R                  U 5      nUS-   U-   $ U$ )zmConstruct target ID from subdir, name and type suffix.

This helper function is made public mostly for tests./@\z@@)r5  r   r  r@  )r   r   r  	name_partmy_idsubdir_parts         r^   construct_id_from_pathTarget.construct_id_from_pathl  sb     LLc*224=	,,,,' --f5K%--r]   c                    U R                   n[        U SS5      (       a  USU R                  -   -  nU R                  U R                  XR                  5       5      $ )Nname_suffix_setFr   )r   r   suffixrI  r   r  r   r   s     r^   id	Target.id  sS    yy4*E22C$++%%D**KK//13 	3r]   c                    U R                   $ r   )rO  r   s    r^   r  Target.get_id  s    wwr]   c                   SU;   a:  US   U l         [        U R                   [        [        45      (       d  [	        S5      eU R                   (       d  UR                  SS5      (       a  SU l         UR                  S0 5      U l        g )Nr   z)build_by_default must be a boolean value.rq   FTr   )r   r9  rO   r2   r   r}  raw_overridesr   kwargss     r^   process_kwargs_baseTarget.process_kwargs_base  ss    '$*+=$>D!d33dL5IJJ&'RSS$$Iu)E)E %)D!#ZZ(:B?r]   c                :    U R                   R                  US 5      $ r   )rT  r}  rN  s     r^   get_overrideTarget.get_override  s    !!%%dD11r]   c                    gNFrU   r   s    r^   is_linkable_targetTarget.is_linkable_target      r]   c                    / $ r   rU   r   s    r^   r  Target.get_outputs      	r]   c                    gr]  rU   r   s    r^   should_installTarget.should_install  r`  r]   )r   rT  Nr  r  )rH  objectr   rO   r   z/T.Union[T.Tuple[str, str], T.Tuple[None, None]]r   $T.List[T.Union[str, Literal[False]]])r   zLT.Tuple[T.List[T.Union[str, Literal[False]]], T.List[T.Optional[str]], bool])r>  r   r   r   )r   r   r   r   r  r   r   r   rV  T.Dict[str, T.Any]r   r   )r   r   r   r   r  r  )&rW   rX   rY   rZ   r[   rq   r  r   rD  rx   abcabstractpropertyr  abstractmethodr  r  r	  r  r  r  r  r   r&  r*  r.  r1  r  r@  rI  r%   rO  r  rW  rZ  r^  r  re  r\   rU   r]   r^   r  r  	  s    IK((GT$$ %d ;K;  	 1.
/
.
/
"">. ! !  $ 3 3@2r]   r  )	metaclassc                  
  ^  \ rS rSr% \rS\S'   \" S/5      rS\S'                       SRU 4S jjr	SSS jr
S	 rS
 rS rS rS rS rSTS jr\SUS j5       rSSS jrSVS jrS rS rSWS jrSXSYS jjr\" SS9SZS j5       r\" SS9SZS j5       rS[S jr\" SS9S[S j5       r\" SS9S\S j5       rS]S jr S^S jr!S_S  jr"S! r#S`S" jr$SaS# jr%SbS$ jr&SVS% jr'ScS& jr(\" SS9SdS' j5       r)SeSfS( jjr*S) r+SgS* jr,ShS+ jr-SiS, jr.SjS- jr/SjS. jr0ScS/ jr1SkS0 jr2S1 r3SlS2 jr4SjS3 jr5SmS4 jr6SnSoS5 jjr7\" SS9SdS6 j5       r8SpS7 jr9SnSqS8 jjr:SrS9 jr;SsS: jr<StSuS; jjr=SvS< jr>SVS= jr?S> r@SwS? jrASxS@ jrBSjSA jrCSjSB jrDSjSC jrESjSD jrFSjSE jrGSF rHSySG jrISzSH jrJS{SI jrKS|SJ jrL\" SS9SXS}SK jj5       rMS~SL jrN\OR                  " SM5      rQ\OR                  " SN5      rR\OR                  " SO5      rS\TSSP j5       rUSQrVU =rW$ )rI   i  rj  ry   )cppcudazT.FrozenSet[T.Tuple[str, str]]_MASK_LANGSc                ,  > [         TU ]  XUSXHU
R                  SS5      S9  Xl        [	        5       U l        / U l        X`l        / U l        / U l	        U
R                  S5      U l
        / U l        / U l        / U l        / U l        [        5       U l        SU l        SU l        SU l        S U l        S U l        U R&                  /U l        0 U l        U
R                  S[1        [2        5      5      U l        / U l        [        5       U l        / U l        / U l        U
R                  S/ 5      U
R                  S	/ 5      U
R                  S
/ 5      U
R                  SS5      S.U l        SU l         SU l!        S U l"        [        5       U l#        U RI                  U5        U RK                  U5        U RM                  U
5        U RO                  5       U l(        U RS                  U
S5      nU RS                  U
S5      nU R                  RU                  5         U R                  RU                  5         U RW                  U5        U RY                  U5        [[        U R6                   Vs/ s H  n[]        U5      (       a  M  UPM     snU R:                  U R                  U R                  U R                  U
R_                  SS5      /5      (       d  [`        Rb                  " SU S35        U Re                  U
5        U Rg                  5         U Ri                  5         g s  snf )NTrq   Frq   r   no_namelanguage_argsrb   rd   re   rc   )rQ   rS   rT   rP   ru   rv   _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)5superr5  r}  all_compilersr   r  rr   structured_sourcesexternal_depsinclude_dirsr   link_targetslink_whole_targetsdepend_filesr~   r  
added_depsname_prefix_setrL  filenamedoctestsdebug_filenameoutputsr  r   rD  
extra_argsrs   seen_sourcesr  rx   
d_featuresr   r   both_librpath_dirs_to_removeprocess_sourcelistprocess_objectlistprocess_kwargsprocess_compilersmissing_languagesextract_targets_as_listclearlinkrv   anyr'   popr   r  check_unknown_kwargsvalidate_installcheck_module_linking)r   r   r   r   rP  rs   r|  rr   r5   r  rV  r  r  srcr  s                 r^   r5  BuildTarget.__init__  s    	z4[a[e[efoqv[wx&5@],."4>@35#ZZ8.0ce*,%$$!-1" -/;A::oWbcgWh;i%'),35)+ZZ	2.!::or:

#6;

<7	&
 KO25%!( 	(F#!%!7!7!9 33FKH!99&,O!%%'		,*+DLLGLS	#SLGY]YeYe++T-D-DfjjQdfkFln o oLL= /P P Q 	!!&)!!# Hs   L5Lc                .   U R                  5         U R                  5       (       a  U R                  (       a  U R                  S:w  a  [        S5      eU R                  (       aM  [        S U R                   5       5      (       d!  [        S U R                   5       5      (       a  [        S5      eSU l        SU l	        OU R                  (       a  [        S5      eSU R                  ;   a  U R                  5       (       a  U =R                  U R                  U R                  /-  sl        U =R                  S	S	/-  sl        U R                   (       aA  U R                  R#                  U R                   5        U R                  R#                  S	5        g
g
g
g
)zUInitialisations and checks requiring the final list of compilers to be known
        rustz8cannot build Rust sources with a different link_languagec              3  B   #    U  H  oR                  S 5      v   M     g7fz.rsNendswithr   r  s     r^   r   (BuildTarget.post_init.<locals>.<genexpr>  s     @<a

5))<   c              3  b   #    U  H%  n[        S  UR                  5        5       5      v   M'     g7f)c              3  B   #    U  H  oR                  S 5      v   M     g7fr  r  r  s     r^   r   2BuildTarget.post_init.<locals>.<genexpr>.<genexpr>  s     K?a

5 1 1?r  N)r  r  )r   gs     r^   r   r    s'     eVdQR3K1==?KLLVds   -/z;cannot mix Rust structured sources and unstructured sourcesTz5structured sources are only supported in Rust targetsvaladevelN)validate_sources	uses_rustr   r   r|  r  rs   r  r   r   r  r^  r  rh   rg   rz   rf   r   r   s    r^   	post_initBuildTarget.post_init  s2    	>>!!d&8&8F&B$%_``&&@4<<@AAeVZVdVdeee()fgg DHDH&&$%\]]T^^#(?(?(A(ALLT--t~~>>L' 22}}##DMM2  ''0  )B#r]   c                    SnUR                  U R                  R                  U R                  5       U R                  5      $ N<{0} {1}: {2}>)r  r  rW   r  r  r   repr_strs     r^   r  BuildTarget.__repr__  s.    #t~~66t}}UUr]   c                    U R                    $ r   r)  r   s    r^   __str__BuildTarget.__str__"  s    ))r]   c                    U R                   [        R                  L aS  U R                  (       aA  U R                  R                  5       (       a  [        S5      e[        R                  " S5        g g g )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.)	rP  r   BUILDrq   r5   r1  r   r   r  r   s    r^   r  BuildTarget.validate_install%  sS    }222t||..00&'jkkno	 8D2r]   c                :    U R                  XR                  5        g r   )check_unknown_kwargs_intknown_kwargsrU  s     r^   r   BuildTarget.check_unknown_kwargs,  s     	%%f.?.?@r]   c                    / nU H#  nUS:X  a  M  XB;  d  M  UR                  U5        M%     [        U5      S:  a@  [        R                  " SR	                  U R
                  SR                  U5      5      5        g g )Nrx  r   z-Unknown keyword argument(s) in target {}: {}., )r   r   r   r  r  r   r   )r   rV  r  unknownsrI  s        r^   r  $BuildTarget.check_unknown_kwargs_int1  so    AO#$"	 
 x=1LLHOOPTPYPY[_[d[dem[nop r]   c                   [        U[        5      (       d   e/ nU GH2  n[        U[        [        [        45      (       aW  U R
                  R                  U5        [        U[        5      (       d%  [        U5      (       d  UR                  U5        Mw  My  M{  [        U[        [        [        45      (       ai  UR                  5        Vs/ s H  n[        U5      (       a  M  UPM     nnU(       a  [        SUS    S35      eU R                  R                  U5        GM  [        S[        U5      R                  < SU R                   < S35      e   U(       a*  ["        R$                  " SUS    S3SU R&                  5        g g s  snf )	NzGenerated file r   z) in the 'objects' kwarg is not an object.zBad object of type z in target r   zSource file z1.3.0)r9  rD  r   r   rJ   rr   r   r(   rD   rE   rF   r  r   r  typerW   r   r1   
single_user   )r   rr   deprecated_non_objectsr  onon_objectss         r^   r  BuildTarget.process_objectlist;  sI   '4((((!#A!c4)9:;;##A&!!%566y||*11!4 @L6A.?OPP*+--/N/Q1q/N*_[^<LLw+xyy%%a(&)<T!W=M=M<PP[\`\e\e[hhi'jkk  "((<8Nq8Q7RR})~)0$//C " Os   	F!Fc                L   U H  n[        U[        5      (       aI  X R                  ;  a8  U R                  R	                  U5        U R                  R                  U5        M_  Ma  [        U[        [        [        45      (       d  M  U R                  R	                  U5        M     g)aP  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)
r9  r   r  rs   r   addrD   rE   rF   r  r   rs   r  s      r^   r  BuildTarget.process_sourcelistN  s{     A!T""---LL''*%%))!, . A.?OPP%%a( r]   c                x    SnUS S   H.  nU R                  U5      (       d  M  UR                  U5        SnM0     U$ )NFT)can_compileremove)rR  rs   removedr  s       r^   can_compile_remove_sources&BuildTarget.can_compile_remove_sources_  s>    A##A&&q!  r]   c                   U R                    H  nU R                  U   U R                  U'   M!     U R                  (       a  U R                  /O[        nU R                  (       aB  U R                  U R                  ;  a(  SU R
                   SU R                   S3n[        U5      eU R                  (       d  U R                  (       a  [        R                  " U R                  U R                  5       Hq  n[        U[        [        45      (       a  M   UR                  R                  5        H3  u  pVUS:X  a  M  XR;   d  M  XPR                  ;  d  M%  X`R                  U'   M5     Ms     U R                  (       d?  [        U5       H0  nXR                  ;   d  M  U R                  U   U R                  U'     O   [!        [#        U R                  R                  5       S S95      U l        U R%                  5         g)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.
zTarget z
 requires z! compiler not part of the projectr  c                    [        U S   5      $ Nr   )r+   )r;  s    r^   r  4BuildTarget.process_compilers_late.<locals>.<lambda>  s    *QqT:Jr]   )keyN)r  r{  r  r   r*   r   r   r  r  r  r  r9  rD   rE   r8  reversedr   sortedr  )r   lang
link_langsmr;  r   rR  s          r^   process_compilers_late"BuildTarget.process_compilers_lateh  s    **D#'#5#5d#;DNN4  + .2-?-?d(()[
!!););;dii[
43E3E2FFgh$Q''  7 7__T%6%68O8OPa,0A!BCC&'kk&7&7&9NDv~ !)d...H/7t, ': Q ~~ !,---+/+=+=d+CDNN4( - %VDNN,@,@,B0J&L Mr]   c                   / n[        U R                  U R                  U R                  U R                  /5      (       d  U$ [        U R                  5      nU R                  R                  5       nU R                  (       as  U R                  R                  R                  5        HK  nU HB  n[        U[        [        45      (       a  UR                  U5        M1  UR                  U5        MD     MM     U H=  nUR                  5        H&  n[        U5      (       a  M  UR                  U5        M(     M?     U R                   HD  nUR                   H1  n[        U[        [        45      (       d  M   UR                  U5        M3     MF     U R                   H  n	[        U	[        5      (       d  M  U	R!                  U	R"                  / 5      n
U
 HI  nUR$                  S:X  a  M  UR$                  U R&                  ;  d  M1  XR&                  UR$                  '   MK     M     U(       a  U H  nU R(                  R+                  5        H;  u  pUR-                  U5      (       d  M  XR&                  ;  a  XR&                  U'     MZ     [/        U5      (       d  Mn  [1        U5      (       a  M  [2        R4                  " [        U5      5      R7                  5       nSU R8                  R;                  5        SU< 3n[=        U5      e   SU R&                  ;   a,  SU R&                  ;  a  U R(                  S   U R&                  S'   SU R&                  ;   av  U R?                  S5      nUcC  [A        SU R8                  S9nU RB                  RD                  RF                  RI                  U5      n U R(                  U   U R&                  U'   U$ U$ ! [J         a    UR                  U5         U$ f = f)a9  
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.
r  zNo z machine compiler for ccythoncython_language)machine)&r  rs   r  rr   r|  rD  rF  r  r9  r   r   r   r  r(   r}  rJ   r  r  languager  r{  r8  r  r-   r'   r   Pathas_posixrP  get_lower_case_namer   rZ  r&   r5   r   optstoreget_value_forKeyError)r   r  rs   r  rJ  r  r  r  r  r  compsrcsr  r  rR  r   r  valuer  s                     r^   r  BuildTarget.process_compilers  s+    *,DLL$..$,,@W@WXYY$$*.t||*<NN'')	"",,44;;=C!#T{33s+!((-	  >  F'')
 !||NN1% *   ##AYYa#t--NN1%  $ Aa!122--aii<H  ==F*==648NN4==1 !	   &*&8&8&>&>&@ND++A..~~53;NN40	 'A 'q)))A,,&||CF3<<>!$"2"2"F"F"H!II_`d_gh,Q//  T^^#4>>(A"&"4"4S"9DNN3t~~%
 %%&78E} 14;K;KL((11::HHM0(,(:(:5(Au% !     0!((/  0s   (O O'&O'c                   ^  [        T R                  5      S:  aR  [        U 4S jS 5       5      (       a7  SR                  T R                  R	                  5       5      n[        SU 35      eg g )Nr
   c              3  @   >#    U  H  oTR                   ;   v   M     g 7fr   r  )r   r  r   s     r^   r   /BuildTarget.validate_sources.<locals>.<genexpr>  s     *]nd4>>+An   )csjavar  z*Cannot mix those languages into a target: )r   r  r  r   keysr   )r   langss   ` r^   r  BuildTarget.validate_sources  s\    t~~"s*]n*]']']IIdnn1134E"%OPUw#WXX (^"r]   c                   [        U5      nU H  n[        U[        5      (       a  U R                  R	                  U5        M5  [        U[
        5      (       aQ  U R                  R	                  [        R                  " U R                  R                  U R                  U5      5        M  [        US5      (       a  U R                  R	                  U5        M  [        S5      e   g)aM  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   r9  r   r~   r   r   from_source_filer5   
source_dirr   hasattrr   r  s      r^   process_link_depends BuildTarget.process_link_depends  s     '"A!T""!!((+As##!!(())$*:*:*E*Et{{TUVXM**!!((+&<= = r]   c                ^   [        U R                  5      n[        U R                  5      n/ n/ nU GHT  n[        U[        [
        45      (       av  [        U[        5      (       a  [        SU R                  U5      nO"[        R                  " SSU R                  5        Xs;  a  [        SU S35      eUR                  U5        M  [        U[        [        [        45      (       a  [        R                  " SSU R                  5        [        U[        5      (       a  UR                  OUnXt;  a"  X;  a  [        SUR!                  5        S35      eUR                  U5        GM5  [        S[#        U5      R$                   S	35      e   ['        XU5      n	U(       a  U	R)                  5         U	$ )
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  rs   r  r9  r   r   r   r0   r  r   r   r   rD   rE   rF   r  r*  r  rW   rJ   r  )
r   r  is_unitysources_setgenerated_setobj_srcobj_genr  r  eobjss
             r^   extract_objectsBuildTarget.extract_objects  su   $,,'DNN+"$,.C#T{++c3''udkk37C))*MxY]YhYhi)(+KC5PQ)RSSs#C,0A=!QRR%%&MxY]YhYhi'1#7H'I'Is+0K(+KFL_L_LaKbbc)dees#$'jkopsktk}k}j~  A  &B  C  C! " !8((*r]   c           	     X    [        X R                  U R                  U R                  USS9$ )NT)r  )rJ   rs   r  rr   )r   r  s     r^   extract_all_objectsBuildTarget.extract_all_objects+  s&    llDNNDLL )t5 	5r]   Nr   c                   [        5       n[        5       nUR                  U 5        U(       a  UR                  5       nX1;   a  M  [	        U[
        5      (       a  UR                  UR                  5        MP  [	        U[        5      (       a  UR                  U5        [	        U[        5      (       a6  UR                  UR                  5        UR                  UR                  5        U(       a  M  [        U5      $ )zGet all shared libraries dependencies
This returns all shared libraries in the entire dependency tree. Those
are libraries needed at runtime which is different from the set needed
at link time, see get_dependencies() for that.
)r   r   
appendleftr  r9  rE   r  rG   r  rI   
extendleftr  r  rD  r   resultstackr;  s       r^   get_all_link_depsBuildTarget.get_all_link_deps/  s     0:|+07		A{!.//  *!]++

1![))  0  !5!56 e F|r]   c                .   [        5       n[        5       nUR                  U R                  5        UR                  U R                  5        U(       a  UR                  5       nX1;   a  M  [        U[        5      (       a  UR                  UR                  5        MP  [        U[        5      (       aG  UR                  U5        UR                  UR                  5        UR                  UR                  5        U(       a  M  X;  d   S5       e[        U5      $ )a   Get all targets that have been linked with this one.

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

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

:returns: An immutable list of BuildTargets
zshould not have self)r   r   r  r  r  r  r9  rE   r  r  rI   r  rD  r  s       r^   get_all_linked_targets"BuildTarget.get_all_linked_targetsG  s     0:|+07**+001		A{!.//  *![))

1  0  !5!56 e !9#99!F|r]   c                $    U R                  U5      $ r   ) get_transitive_link_deps_mappingr   r   s     r^   get_link_deps_mapping!BuildTarget.get_link_deps_mappingh  s    44V<<r]   c                    0 nU R                    H7  nUR                  U5      nUR                  5       nUR                  U5        UnM9     U$ r   )r  r  rF  r;  )r   r   r  r$  mapping
result_tmps         r^   r  ,BuildTarget.get_transitive_link_deps_mappingk  sL    #%""A--f5G Jf%F # r]   c                    [        5       nU R                   HV  n[        U[        5      (       d  UR	                  UR                  5       5        UR                  UR                  5       5        MX     U$ r   )r   r  r9  rH   r  r.  r;  get_link_dep_subdirs)r   r  r$  s      r^   r!   BuildTarget.get_link_dep_subdirsv  sT    ",,""Aa//

1<<>*MM!0023 # r]   c                :    U R                   R                  5       S4$ )Nz{libdir})r5   
get_libdirr   s    r^   r  #BuildTarget.get_default_install_dir      **,j88r]   c                    U R                   $ r   ry   r   s    r^   r   "BuildTarget.get_custom_install_dir      r]   c                    U R                   $ r   r}   r   s    r^   r   #BuildTarget.get_custom_install_mode  r{  r]   c                   U R                  U5        Xl        U R                  S[        US5      5        U R                  S[        US5      5        [	        U [
        5      (       a  UR                  SS5      (       a_  UR                  SU R                  S-   5      U l        UR                  S	U R                  S
-   5      U l	        UR                  SS 5      U l
        [        US5      U l        U R                   H#  n[	        U[        5      (       a  M  [        S5      e   U R                   HK  nSU;   d  UR                  S5      (       d  M!  [        R                   " ["        R$                  " S5      5        MM     U R'                  UR                  S/ 5      5        [        US5      nU R)                  U5        [        US5      nU R+                  U5        [-        UR                  S/ 5      [        [.        45      U l        UR                  SS 5      U l        [5        UR                  SS /5      5      U l        [	        U [
        5      (       d:  UR                  S5      b  [        S5      eUR                  S5      b  [        S5      e[        US5      nU H  n[	        U[8        5      (       d   eX R:                  ;   a  M+  [<        R>                  RA                  U RB                  RE                  5       URF                  URH                  5      n[<        R>                  RK                  U5      (       d  [        SU S35      eU R:                  RM                  U5        M     UR                  SS5      U l'        [	        U RN                  [        5      (       d  [        S 5      eUR                  S!S5      U l(        [	        U RP                  [        5      (       d  [        S"5      e[        US#5      nU H  n	[	        U	[        5      (       d  [        S$5      e[<        R>                  RA                  U RB                  RE                  5       U RF                  U	5      n[<        R>                  RK                  U5      (       a  M  [        S%U	 S35      e   Xl)        UR                  S&5      bp  US&   n
[	        U
[T        5      (       a  OU[	        U
[V        5      (       a  U
(       a  [        S'5      eO-[	        U
[        5      (       d  [        S(5      eXl,        S)U l-        UR                  S*5      b  US*   n[	        U[T        5      (       a  Of[	        U[V        5      (       a  U(       a  [        S+5      eO>[	        U[        5      (       d  [        S,5      eUS:X  a  [        S-5      eXl.        S)U l/        [	        U [`        5      (       am  U RB                  Rb                  U Rd                     nURg                  5       (       d  URi                  5       (       a  S)U l5        OU Rm                  US.S/5      U l5        [	        U [
        5      (       d&  [	        U [`        5      (       ag  U Rj                  (       dV  U RB                  Rb                  U Rd                     Ro                  5       (       a  S)U l8        OU Rm                  US0S15      U l8        UR                  S2S)5      U l9        [	        U Rr                  [.        5      (       d  [        S35      eUR                  S4S5      U l:        [	        U Rt                  [        5      (       d  [        S55      eU Rt                  S:w  aH  / S6QnU Rt                  U;  a4  [        S7Rw                  U Rt                  S8RA                  U5      5      5      eUR                  S90 5      n[	        U[x        5      (       d  [        S:U S;35      e[{        S< UR}                  5        5       5      (       a  [        S:U S=35      eXl?        UR                  S>5      U l@        UR                  S?5      U lA        U R                  S:X  a  U R                  U lA        g g )@Nr  r_   rr  r`   r   Frh   z.hrg   z.vapirf   rt   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.
                r~   r   r   ry   r}   rz   rp   z1Argument gui_app can only be used on executables.r   z7Argument win_subsystem can only be used on executables.rx   z%Tried to add non-existing extra file r   r   r   zInstall_rpath is not a string.rw   zBuild_rpath is not a string.rk   z"Resource argument is not a string.z#Tried to add non-existing resource r{   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.zname_suffix should not be an empty string. If you want meson to use the default behaviour for each platform pass `[]` (empty array)r   b_staticpicr   b_pier   z/Implicit_include_directories must be a boolean.r   z'GNU symbol visibility must be a string.)r0  internalhidden	protectedinlineshiddenz+GNU symbol visibility arg {} not one of: {}r  rj   zInvalid rust_dependency_map "z": must be a dictionary.c              3  L   #    U  H  n[        U[        5      (       + v   M     g 7fr   )r9  r   )r   rJ  s     r^   r   -BuildTarget.process_kwargs.<locals>.<genexpr>  s     L/K!:a%%%/K   "$z+": must be a dictionary with string values.rm   rn   )BrW  original_kwargsadd_pchr   r9  
Executabler}  r   rh   rg   rf   rt   r   r   
startswithr   r  r   r  r  add_include_dirsadd_depsr   rO   ry   r}   r   rz   r   rx   r   r   r   r5   get_source_dirr   r  isfiler   r   rw   rk   r2   rD  r   r  rM  rL  rH   machinesrP  	is_darwin
is_windowsr   _extract_pic_pie
is_androidr   r   r   r  rE  r  r  rj   rm   rn   )r   rV  r$  r
  inclistdeplistrx   trialrk   r  r{   r|   r  	permittedrj   s                  r^   r  BuildTarget.process_kwargs  s     (%S/&':;UOFI>?$
++vzz:JE/R/R%zz-T9IJD#ZZTYY5HIDN"JJz48DM(=Aa%%&'MNN   Aq ALL$:$:X__ .     	!!&**^R"@A "&*?@g&!&.9g (

="(E),d5"JJ~t<(MD6)JK$
++zz)$0&'Z[[zz/*6&'`aa%fm<Aa&&&&$$$GGLL!1!1!@!@!BAHHaggVE77>>%((&)NqcQR'STT##A&  #)**_b"A$,,c22"#CDD!::mR8$**C00"#ABB#FK8	Aa%%&'KLLGGLL!1!1!@!@!BDKKQRSE77>>%((&)LQCq'QRR  #::m$0 /K+|44K..*+`aa  "+s33*+JKK)'+$::m$0 /K+|44K..*+`aa  "+s33*+JKK"$* ,W X X *'+$dM**   ))$*:*:;A{{}}00NdJ''Jt],K,KTXT\T\(()9)9:EEGG00H,2JJ7UW[,\)$;;TBB"#TUU%+ZZ0G%L"$44c::"#LMM%%+WI)):&'T'['[\`\v\vx|  yB  yB  CL  yM  (N  O  O$jj)>C-t44"%BCVBWWo#pqqL/B/I/I/KLLL"%BCVBW  XC  $D  E  E#6 +1::6S+T(!',?!@!!R'%)YYD" (r]   c                   U R                   S   U R                   S   -   nSUR                  5       -   U;   d  SUR                  5       -   U;   a+  [        R                  " SU SU SU R
                  < 35        g[        U5      nUR                  U5      b  [        R                  " SX   5      nOjXPR                  R                  R                  ;   aE  U R                  R                  R                  R                  UR
                  UR                  5      nOS	n[        U[         5      (       d  [#        S
U SU R
                  < S35      eU$ )Nr  rr  z-fz	Use the 'z' kwarg instead of passing '-fz' manually to TrO   F	Argument z to z must be boolean)r  lowerupperr   r  r   r&   r}  Tcastr5   r   r  r  r   r9  rO   r   )r   rV  argoption	all_flagsrI  vals          r^   rC  BuildTarget._extract_pic_pie  s   OOC(4??5+AA	#))+*dSYY[.@I.MLL9SE)GuN[_[d[dZghif::c?&&&-C""++444""++44BB1661<<XCC#t$$"Yse4		}DT#UVV
r]   c                    U R                   $ r   )r  r   s    r^   get_filenameBuildTarget.get_filename   rt  r]   c                    U 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   s    r^   get_debug_filenameBuildTarget.get_debug_filename#       """r]   c                    U R                   $ r   r  r   s    r^   r  BuildTarget.get_outputs+  r   r]   c                     U R                   U   $ r   r  r   r  s     r^   get_extra_argsBuildTarget.get_extra_args.  s    x((r]   c                   [        5       n[        R                  " U R                  U R                  5       HO  nX!;  d  M
  UR                  U5        [        U[        5      (       d  M2  UR                  XR                  5       S9  MQ     U$ )N)include_proc_macros)
r   r  r  r  r  r  r9  rH   get_dependencies_recurser  r   r  r;  s      r^   get_dependenciesBuildTarget.get_dependencies1  si     0:|!2!2D4K4KLA

1a//..v^^M].^	 M
 r]   c                   U=(       a    U R                  5       nU R                   Hy  nXA;   a  M
  U(       d  UR                  S:X  a  M#  U(       d  UR                  5       (       d  UR                  U5        [	        U[
        5      (       d  Mg  UR                  XU5        M{     U R                   H  nUR                  XU5        M     g )N
proc-macro)is_internalr  ri   r  r9  rH   rh  r  )r   r  include_internalsrg  r;  s        r^   rh  $BuildTarget.get_dependencies_recurse@  s    
 .D$2B2B2D""A{&1+<+<+L 

1!]++**6FYZ # ((A&&vBUV )r]   c                    U R                   $ r   r-  r   s    r^   get_source_subdirBuildTarget.get_source_subdirR  r  r]   c                    U R                   $ r   r   r   s    r^   r   BuildTarget.get_sourcesU  r   r]   c                    U R                   $ r   )rr   r   s    r^   get_objectsBuildTarget.get_objectsX  r   r]   c                    U R                   $ r   )r  r   s    r^   get_generated_sources!BuildTarget.get_generated_sources[      ~~r]   c                    U R                   $ r   rv  r   s    r^   re  BuildTarget.should_install^  r   r]   c                ,    [        U R                  5      $ r   )rO   r  r   s    r^   has_pchBuildTarget.has_pcha  s    DHH~r]   c                :    U R                   R                  U/ 5      $ r   )r  r}  rc  s     r^   get_pchBuildTarget.get_pchd  s    xx||Hb))r]   c                    U R                   $ r   )r~  r   s    r^   get_include_dirsBuildTarget.get_include_dirsg  r{  r]   c                P  ^  [        U5      nU GH  nUT R                  ;   aM  UR                  5       (       a6  T R                  R                  U5        T R                  R	                  U5        Ma  [        U[        R                  5      (       Ga  T R                  UR                  5        T R                  R                  U 4S jUR                   5       5        T R                  UR                  UR                  5       5        T R                  R                  UR                  5        T R                   R                  UR"                  5        T R$                  R                  UR&                  5        UR)                  5       (       d  UR+                  5       (       ad  [        R                  " S/ UR)                  5       UR+                  5       / / / / / 0 / / / UR,                  5      nT R.                  R1                  U5        T R3                  UR4                  5        GO-[        U[        R6                  5      (       af  UT R.                  ;  a:  T R.                  R1                  U5        T R                  UR9                  5       5        T R3                  UR4                  5        O[        U[:        5      (       a&  [=        SUR,                   ST R,                   S35      e[?        US5      (       a  UR@                  n[?        US5      (       d  [?        US5      (       a  [=        S	5      e[=        S
[C        U5      RD                  < S35      eURF                  nS H*  nXT;   d  M
  T RF                  U   R                  XE   5        M,     T R                  R	                  U5        GM     g )Nc              3  J   >#    U  H  oTR                   ;  d  M  Uv   M     g 7fr   )rx   )r   r  r   s     r^   r   'BuildTarget.add_deps.<locals>.<genexpr>w  s     '`?atO_O_F_?s   #	#	undefinedzTried to use a build target z as a dependency of target z2.
You probably should put it in link_with instead.held_objectproject_args_frozenglobal_args_frozenzTried to use subproject object as a dependency.
You probably wanted to use a dependency declared in it instead.
Access it by calling get_variable() on the subproject object.z$Argument is of an unacceptable type z.
Must be either an external dependency (returned by find_library() or dependency()) or an internal dependency (returned by declare_dependency()).)rT   rS   )$r   r  is_namedr  r  r9  r   InternalDependencyr  rs   rx   r  r<  r   get_include_typerr   r  	librariesr  whole_librariesget_compile_argsget_link_argsr   r}  r   r=  ext_deps
Dependencyr   rI   r   r  r  r  rW   r  )r   depsr   extpartdep_d_featuresfeatures   `     r^   r=  BuildTarget.add_depsj  s   t}Cdoo%<<>>OO**3/OO'',#|>>??''4  '''`3??'``%%c&=&=s?S?S?UV##CKK0!!((7''..s/B/BC''))S->->-@-@*==k>@>A>R>R>T>A>O>O>Q>@"b"bRTVXZ\^`>AhhHG &&--g6cll+C!8!899d000&&--c2++COO,=>cll+C--&)EchhZOjkoktktju vZ (Z [ [ 3..//C3 566'#G[:\:\* ,k l l ')MdSViN`N`Mc d@ (@ A A
 !^^N6,OOG,33N4KL 7 OO$s r]   c                    U R                   $ r   )r}  r   s    r^   get_external_depsBuildTarget.get_external_deps  s    !!!r]   c                    gr]  rU   r   s    r^   rn  BuildTarget.is_internal  r`  r]   c                   U GHu  n[        U[        [        45      (       dM  [        U[        R                  5      (       a  [        [        R                  " S5      5      e[        U< S35      eUR                  5       (       d  [        SU< S35      e[        U [        5      (       a9  U R                  (       a(  UR                  5       (       a  U R                  U/SS9  M  [        U [        5      (       aU  [        U[        5      (       a@  UR                  (       d/  SUR                   < SU R                   < S	3nUS
-  n[        U5      eU R#                  U5        U R$                  R'                  U5        GMx     g )Na                          An external library was used in link_with keyword argument, which
                        is reserved for libraries built as part of this project. External
                        libraries must be passed using the dependencies keyword argument
                        instead, because they are conceptually "external dependencies",
                        just like those detected with the dependency() function.
                    z is not a target.zLink target 'z' is not linkable.T)promoted"Can't link non-PIC static library  into shared library . 9Use the 'pic' option to static_library to build with PIC.)r9  r  rE   r   ExternalLibraryr   r   r  r   r^  rH   rq   rn  rv   rG   r   r   check_can_link_togetherr  r   )r   r  r;  msgs       r^   r  BuildTarget.link  s8   Aa&*;!<==a!=!=>>( : *   '!.?'@AA''))&qe;M'NOO$..4<<AMMOO d3$..:a3O3OXYX]X]:166*DYZ^ZcZcYffhiRR&s++((+$$Q'/ r]   c                   U GHj  n[        U[        [        45      (       aF  UR                  5       (       d  [	        SU< S35      eUR                  5       (       a  [	        S5      eOy[        U[        5      (       d  [	        U< S35      e[        U [        5      (       a@  UR                  (       d/  SUR                  < SU R                  < S3nUS-  n[	        U5      eU R                  U5        [        U [        5      (       aK  U R                  X25        U R                  (       a)  UR                  5        H  nU R                  US	5        M     U R                  R                  U5        GMm     g )
NzCustom target z is not linkable.z<Can only link_whole custom targets that are static archives.z is not a static library.r  r  r  r  T)r9  rD   rE   r^  r   links_dynamicallyrH   rG   r   r   r  _bundle_static_libraryrq   get_internal_static_librariesr  r   )r   r  r  r;  r  libs         r^   rv   BuildTarget.link_whole  s:   A!l,=>??++--*^A5@Q+RSS&&((*+ijj )=11&!.G'HIID-00:166*DYZ^ZcZcYffhiRR&s++((+$.. ++A8 << >>@33C>  A##**1-- r]   c                <    [        5       nU R                  U5        U$ r   )r   %get_internal_static_libraries_recurser   r  s     r^   r  )BuildTarget.get_internal_static_libraries  s    /9|226:r]   c                    U R                    HC  nUR                  5       (       d  M  X!;  d  M!  UR                  U5        UR                  U5        ME     U R                   H+  nUR                  5       (       d  M  UR                  U5        M-     g r   )r  rn  r  r  r  ri  s      r^   r  1BuildTarget.get_internal_static_libraries_recurse  se    ""A}}1?

177? # ((A}}77? )r]   c                   U R                  5       (       a  U R                  R                  U5        g [        U[        [
        45      (       d  UR                  5       (       aa  SUR                  < SU R                  < S3nU(       a0  USU R                  < SUR                  < SUR                  < S3-  n[        U5      eU R                  R                  UR                  5       5        g )Nz*Cannot link_whole a custom or Rust target z into a static library zY. Instead, pass individual object files with the "objects:" keyword argument if possible.z1 Meson had to promote link to link_whole because z is installed but not z', and thus has to include objects from z to be usable.)
r  r  r   r9  rD   rE   r   r   rr   r
  )r   r;  r  r  s       r^   r  "BuildTarget._bundle_static_library  s    >>##**1-L*;<== >affZG^_c_h_h^k lk kAI$))Vlmnmsmslv w??@vvjX Y"1%%LL 5 5 78r]   c           	     6   [        U[        5      =(       a    UR                  5       nU R                  5       (       d.  U(       a'  [	        SUR
                  < SU R
                  < 35      eU R                  UR                  La  U(       a  UR                  S:w  a~  SUR                   SUR
                   SU R                   SU R
                   S3	nU R                  R                  5       (       a  [	        US	-   5      e[        R                  " US
-   5        g g g )NzTry to link Rust ABI library z with a non-Rust target rm  zTried to mix a z library ("z
") with a z	 target ""z' This is not possible in a cross build.z This will fail in cross build.)r9  rI   uses_rust_abir  r   r   rP  ri   r5   r1  r   r  )r   r;  links_with_rust_abir  s       r^   r  #BuildTarget.check_can_link_together  s    (K8NQ__=N~~$7"%B166*Ldeienendq#rss1==0:MQRQbQbfrQr#AMM?+affXZPTP`P`OaajkoktktjuuvwC..00&s-V'VWWS#DDE Rs0r]   c                
   U(       d  g [        U5      S:X  a'  [        US   5      (       d  [        SUS    S35      eGO[        U5      S:X  a  [        US   5      (       a  [        US   5      (       d  [        S5      eON[        US   5      (       a)  [        US   5      (       d  [        S5      eUS   US   /nO[        SUS    S35      e[        R
                  R                  US   5      [        R
                  R                  US   5      :w  a  [        S5      e[        R                  " S	S
U R                  S5        O[        U5      S:  a  [        S5      eU H  n[        U[        5      (       d  [        S5      e[        R
                  R                  [        R
                  R                  U R                  R                   U R"                  U5      5      (       a  M  [        SU S35      e   X R$                  U'   g )Nr
   r   zPCH argument z is not a header.   z>PCH definition must contain one header and at most one source.z is of unknown type.z,PCH files must be stored in the same folder.zPCH source filesr   z)Only a single header file should be used.z-PCH definition may have a maximum of 2 files.zPCH arguments must be strings.zFile z does not exist.)r   r'   r   r)   r   r   dirnamer1   r  r   r9  r   r   r?  r   r5   r  r   r  )r   r  pchlistr  s       r^   r9  BuildTarget.add_pch  s   \QWQZ((&wqzlBS'TUU )\Q$$ ,,*+kll -71:&& ,,*+kll"1:wqz2&wqzlBV'WXXwwwqz*bggoogaj.II&'UVV(();Xt)TV\A"#RSSAa%%$%EFF77>>"'',,t/?/?/J/JDKKYZ"[\\$uQC/?%@AA	 
 %r]   c           
     ^   / nU H4  n[        U[        5      (       d  [        S5      eUR                  U5        M6     Uc  SnUS:w  aL  US:H  nU Vs/ s H:  n[        UR	                  5       UR                  5       XVR                  5       5      PM<     nnU =R                  U-  sl        g s  snf )NzAInclude directory to be added is not an include directory object.preservesystem)r9  r  r   r   r  r  r  r~  )r   r  set_is_systemidsar  r   s          r^   r<  BuildTarget.add_include_dirs/  s    %'Aa--&'jkkJJqM   &MJ&%1Inqrnqij;q||~q}}	KaKaKcdnqCrS  ss   AB*c                    / $ r   rU   r   s    r^   get_aliasesBuildTarget.get_aliases<  rc  r]   c                   / nU R                    H?  nUR                  c  M  UR                  U;  d  M$  UR                  UR                  5        MA     [        R                  " U R
                  U R                  5       Hh  n[        U[        [        45      (       a  M   UR                   H8  nUS:X  a  UR                  5       (       d  M   XA;  d  M'  UR                  U5        M:     Mj     U$ )aB  
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
r  )r}  r  r   r  r  r  r  r9  rD   rE   r  r  )r   r  r   link_targetr  s        r^   get_langs_used_by_deps"BuildTarget.get_langs_used_by_deps?  s       %%C||#||5(S\\*	 & %??4+<+<d>U>UVK+6G'HII'11v%k.G.G.I.I(LL* 2 W r]   c           	     D   U R                   (       a  U R                  U R                      nU$ [         H&  nX R                  ;   d  M   U R                  U   nUs  $    [        SU R                  < S35      e! [         a    [        SU R                  < SU S35      ef = f)Nz2Could not get a prelinker linker for build target z$. Requires a compiler for language "&", but that is not a project language.z"Could not determine prelinker for r   )r   r{  r*   r  r  r   r   )r   r  r
  	prelinkers       r^   get_prelinkerBuildTarget.get_prelinker^  s    %%d&8&89DKANN"/ $ 2 21 5I !   A$))aPQQ   /(LTYYM Z==>C @../ //s   A77(Bc           	        U R                   (       a5  U R                  U R                      nXR                  U R                  5      4$ U R                  R                  R
                  U R                     nU R                  5       n[         H<  nX@R
                  ;   d  XC;   d  M   X$   nU R                  UR                  5      nXV4s  $    [         H/  n U R                  U   nXR                  U R                  5      4s  $    [        SU R                  < 35      e! [         a    [        SU R                  < SU S35      ef = f! [         a     M  f = f)a{  
We use the order of languages in `clink_langs` to determine which
linker to use in case the target has sources compiled with multiple
compilers. All languages other than those in this list have their own
linker.
Note that Vala outputs C code, so Vala sources can use any linker
that can link compiled C. We don't actually need to add an exception
for Vala here because of that.
z0Could not get a dynamic linker for build target z". Requires a linker for language "r  )r   r{  language_stdlib_only_link_flagsr5   r   r  rP  r  r*   r  r   r   get_used_stdlib_argsr  AssertionError)r   r  r{  	dep_langsr
  linkerstdlib_argss          r^   $get_clink_dynamic_linker_and_stdlibs0BuildTarget.get_clink_dynamic_linker_and_stdlibsn  sa    %%d&8&89D==d>N>NOOO
 ((11;;D<L<LM //1	 ANN"an/*-F ,0+D+DV__+U **   A))!,AA$BRBRSSS  OPTPYPY}]^^'   /(J499- X;;<# >../ //   s   $D*E(E
EEc                f   U R                   R                  R                  U R                     n[	        U R                  5      R                  U R                  5       5      n/ nU HI  nXQ:w  d  M
  XQ4U R                  ;  d  M  UR                  X%   R                  U R                   5      5        MK     U$ r   )
r5   r   r  rP  r  unionr  rt  r  r  )r   r   r{  	all_langsr  dls         r^   r   BuildTarget.get_used_stdlib_args  s    ((11;;D<L<LM'--d.I.I.KL	#%B"':$BRBR'R ""=#4#T#TUYUeUe#fg  r]   c                     SU R                   ;   $ )Nr  r  r   s    r^   r  BuildTarget.uses_rust  s    ''r]   c                N    U R                  5       =(       a    U R                  S;   $ )N>   rlibdylibrm  )r  ri   r   s    r^   r  BuildTarget.uses_rust_abi  s     ~~[D$8$8<[$[[r]   c                     SU R                   ;   $ )Nfortranr  r   s    r^   uses_fortranBuildTarget.uses_fortran  s    DNN**r]   c                L    U R                   S:H  =(       a    SU R                  ;   $ )Nrr  swift)rm   r  r   s    r^   uses_swift_cpp_interop"BuildTarget.uses_swift_cpp_interop  s!    //58VW=VVr]   c                    U R                  5       (       a  U R                  S   nOU R                  5       u  pU=(       a    UR                  5       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  >   r  xilinkoptlinklld-link)r  r{  r  get_linker_id)r   rR  _s      r^   get_using_msvcBuildTarget.get_using_msvc  sK    & >>))&1HCCEKHaH2248aaar]   c                   U R                    GH0  n[        U[        5      (       d  M  UR                  (       a  M.  U R                  R
                  U R                     R                  5       (       a&  [        SU R                   SUR                   S35      eU R                  R
                  U R                     R                  5       (       a  [        U [        5      (       a	  SUl        M  [        R                  " SU R                   SUR                   SUR                   SUR                   S3	5        SUl        GM3     g)	zB
Warn if shared modules are linked with target: (link_with) #2865
ztarget z links against shared module z. This is not permitted on OSXTzj, which is incorrect.
             This will be an error in meson 2.0, so please use shared_library() for z7 instead.
             If shared_module() was used for z because it has references to undefined symbols,
             use shared_library() with `override_options: ['b_lundef=false']` instead.N)r  r9  SharedModuleforce_sonamer5   r@  rP  rA  r   r   rD  r   deprecation)r   r  s     r^   r   BuildTarget.check_module_linking  s(     ,,K+|44[=U=U=U##,,T-=-=>HHJJ(!$)),I+JZJZI[[yz| |%%..t/?/?@KKMMR\]acoRpRp 04K,$$wtyyk9VWbWgWgVh ioozoo  oA AHHSHXHXGY Zs	&s t 04K,% -r]   c                n   UR                  S5      c  g US   n[        U[        5      (       a|  [        R                  R                  U5      (       a  [        R                  " U5      U l        O[        R                  " U R                  R                  U R                  U5      U l        O{[        U[        5      (       a  X l        O_[        U[        [        45      (       a9  [        R                  " UR!                  5       UR#                  5       5      U l        O[%        S5      eU R'                  U5        g )Nr   z`vs_module_defs must be either a string, a file object, a Custom Target, or a Custom Target Index)r}  r9  r   r   r   isabsr   from_absolute_filer   r  r5   r  r   rD   rE   from_built_filer.  rV  r   r  )r   rV  r   s      r^   process_vs_module_defs_kw%BuildTarget.process_vs_module_defs_kw  s    ::&'/DJK[D\dC  ww}}T""&*&=&=d&C#&*&;&;D<L<L<W<WY]YdYdfj&k#d##"&|->?@@"&"6"6t7H$J[J[J]"^D"KL L 	!!$'r]   c                   U R                   R                  R                  R                  [	        S5      5      nUS:X  a/  [        U [        5      (       a  SnO[        U [        5      (       a  SnUS:X  a  U R                  OU R                  n/ n[        UR                  U/ 5      5      U-    HQ  n[        U[        [        45      (       a"  UR                  UR                  U5      5        M@  UR                  U5        MS     U$ )Ndefault_both_librariesautostaticsharedru   )r5   r   r  r  r&   r9  rH   rG   r  r  r   r}  r  BothLibrariesr   )r   rV  r  bl_type	self_libslib_listr  s          r^   r  #BuildTarget.extract_targets_as_list  s    ""++44BB9MeCfgf$.."D-00";>+;Md&7&7SWSjSj	6::c2./);C#677 01$	 <
 r]   c                    U $ zBase case used by BothLibrariesrU   r   lib_types     r^   r}  BuildTarget.get      r]   c                   U R                   R                  R                  R                  [	        S5      5      S:X  a  [        U R                  5       5      nO[        5       nUR                  S5        UR                  U R                  5       5        U R                  R                  U Vs/ s H  o"R                  S5      PM     sn5        [        U5      $ s  snf )Nlayoutmirrorz	meson-outr4  )r5   r   r  r  r&   r   r!  r  r;  /rpaths_for_non_system_absolute_shared_librariesr  r<  tuple)r   r  r  s      r^   determine_rpath_dirs BuildTarget.determine_rpath_dirs  s    $$--;;Ih<OPT\\ 9 9 ;<F\FJJ{#dJJLM!!((V)LV((7*;V)LMV} *Ms   *Cc                   [        5       nU R                  R                  5       n[        5       nU(       aK  U R                  R                  5        H-  nUR                  UR                  U R                  5      5        M/     U R                  5       n[        U R                  R                  5       U R                  R                  5       5      nU R                   GH  nUR                  S;  a  M  UR                   GHF  n	U	R                  S5      (       a  M  [        R                   R#                  U	5      (       d  MB  [        R                   R%                  U	5      u  pUR'                  S5      (       d  SU;   d  M  X;   a  M  U(       a%  [        R                   R)                  U
5      U;   a  M  [+        X:5      (       aq  U
[-        U5      S-   S  n[        R                   R#                  U5      (       a   SU S35       eUR/                  [        R                   R1                  X|5      5        GM5  UR/                  U
5        GMI     UR3                  U R5                  UR                  5      5        GM     [6        R8                  " U R:                  U R<                  5       H:  n[?        U[@        5      (       d  M  UR                  URC                  U5      5        M<     [E        U5      $ )N>   cmakelibrary	pkgconfig-).dll.lib.sor   z.so.r
   zrel_to_src: z is absolute)#r   r5   r>  r  r  r  r;  get_library_dirsget_external_rpath_dirsr    get_build_dirr}  	type_namert   r;  r   r   r  splitr  r  r   r   r  r   difference_updateget_rpath_dirs_from_link_argsr  r  r  r  r9  rI   r  rD  )r   exclude_systempathssrcdirsystem_dirsccexternal_rpathsbuild_to_srcr   libpathlibdirlibname
rel_to_srcr$  s                 r^   r  ;BuildTarget.rpaths_for_non_system_absolute_shared_libraries!  s1   !+!!002enn++-""2#6#6t7G7G#HI . 668t//>>@#//==?A %%C}}$EE==%%c**ww}}W--"$''--"8 $$%FGG( ,277#3#3F#;{#J!&11!'Fa(8!9J!ww}}Z88aLT`:aa8IIbggll<DEIIf%; )> ##D$F$Fs}}$UVE &F !2!2D4K4KLA![))QNN~^_ M E{r]   c                    / n[          H6  n XR                  R                  R                  U R                  U5      -  nM8     U R                  U5      $ ! [
         a     MX  f = fr   )r/   r5   r   get_external_link_argsrP  r  r+  )r   r  r  s      r^   r&  #BuildTarget.get_external_rpath_dirsW  se    +D((11HHIYIY[_`` ,
 11$77  s   2A
A"!A"z-Wl,-rpath[=,]([^,]+)z-Wl,-R[,]?([^,]+)z-Wl,--just-symbols[=,]([^,]+)c                   [        5       nU GHu  nUR                  S5      (       d  M  U R                  R                  U5      nU(       a8  UR	                  S5      R                  S5       H  nUR                  U5        M     U R                  R                  U5      nU(       a^  UR	                  S5      R                  S5       H:  n[        R                  R                  U5      (       d  M)  UR                  U5        M<     U R                  R                  U5      nU(       d  GM  UR	                  S5      R                  S5       H6  n[        R                  R                  U5      (       d  M)  [        SU S35      e   GMx     U$ )Nz-Wl,r
   :z Invalid arg for --just-symbols, z is a directory.)r  r;  _rpath_regexmatchgroupr)  r  _runpath_regexr   r   isdir_symbols_regexr   )clsr  dirsrP  rpath_matchdirrunpath_matchsymbols_matchs           r^   r+  )BuildTarget.get_rpath_dirs_from_link_argsm  s.   5C>>&))**005K&,,Q/55c:CHHSM ;..44S9M(..q177<Cww}}S)) =  ..44S9M}(..q177<Cww}}S)),/OPSuTd-eff =! ( r]   )1r  r{  r  rw   r  r  r  r  r  r}  r  rx   r  r  r   r   r~  ry   r}   r   rz   rt   r~   r   r  r  r  r  rL  rr   r8  r  r  r   r   r   rk   r  rj   r  rs   r|  rM  rm   rn   rf   rh   rg   r   )r   r   r   r   r   r=   rP  r   rs   T.List['SourceOutputs']r|  T.Optional[StructuredSources]rr   T.List[ObjectTypes]r5   r  r  T.Dict[str, 'Compiler']rV  rl  r  )rs   rJ  r   r   )rR  r  rs   r  r   rO   r  )r  z1T.List[T.Union['FileOrString', 'GeneratedTypes']]r  rO   r   rJ   T)r  rO   r   rJ   r   z'ImmutableListProtocol[BuildTargetTypes]r   r   r   zT.Mapping[str, str]r   zT.AbstractSet[str]rh  ri  r   zT.Optional['FileMode'])rV  rl  rP  r   rQ  r   r   rO   r  r   )r  r   r   r   r   OrderedSet[BuildTargetTypes])TF)r  rT  ro  rO   rg  rO   r   r   r   )r   r  )r   r  r  )r   zT.List['IncludeDirs'])r   T.List[dependencies.Dependency])r  T.List[BuildTargetTypes]r   r   F)r  rV  r  rO   r   r   r  rT  r   r   )r;  zT.Union[BuildTargetTypes]r  rO   r   r   )r;  BuildTargetTypesr   r   )r  r   r  r   r   r   r   )r  zT.Sequence['IncludeDirs']r  r   r   r   r   zT.List[T.Tuple[str, str, str]])r   z T.Tuple['Compiler', T.List[str]])r   r   r   r   rk  )rV  z4T.Dict[str, T.Union[LibTypes, T.Sequence[LibTypes]]]r  z$T.Literal['link_with', 'link_whole']r   zT.List[LibTypes])r  T.Literal['static', 'shared']r   LibTypes)r   zT.Tuple[str, ...])r,  rO   r   zImmutableListProtocol[str])r   
T.Set[str])r  r   r   r]  )XrW   rX   rY   rZ   known_build_target_kwargsr  r[   	frozensetrt  r5  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  rC  rV  r[  r  rd  rj  rh  rr  r   rw  rz  re  r  r  r  r=  r  rn  r  rv   r  r  r  r  r9  r<  r  r  r  r  r  r  r  r  r  r  r  r  r  r}  r  r  r&  recompiler=  r@  rB  classmethodr+  r\   __classcell__r  s   @r^   rI   rI     s   ,L55 3<= 3K/ 
O$O$ O$ #	O$
 'O$ -O$ !>O$ )O$ 1O$ /O$ 'O$b18VpA
qC&)"  -^Z!xY
=.85 t . t @= t  t 9 !C/J&#) t W$*!;%z"(4.2 t 
@9,	F%>!>R /_b
(\+Wb440(,$
 t3 3j8 ::67L ZZ 45N ZZ @AN r]   rI   c                  ,    \ rS rSrSrSS jrSS jrSrg)	FileInTargetPrivateDiri  zRepresents a file with the path '/path/to/build/target_private_dir/fname'.
target_private_dir is the return value of get_target_private_dir which is e.g. 'subdir/target.p'.
c                    Xl         g r   r  )r   r  s     r^   r5  FileInTargetPrivateDir.__init__      
r]   c                    U R                   $ r   rh  r   s    r^   r  FileInTargetPrivateDir.__str__  ra  r]   rh  N)r  r   r  )rW   rX   rY   rZ   r  r5  r  r\   rU   r]   r^   rf  rf    s    r]   rf  c                  T    \ rS rSrSrS
S jr\SS j5       rSS jrSS jr	SS jr
Srg	)FileMaybeInTargetPrivateDiri  z1Union between 'File' and 'FileInTargetPrivateDir'c                    Xl         g r   inner)r   rq  s     r^   r5  $FileMaybeInTargetPrivateDir.__init__  rj  r]   c                .    U R                   R                  $ r   )rq  r  r   s    r^   r  !FileMaybeInTargetPrivateDir.fname  s    zzr]   c                    [        U R                  [        5      (       a3  [        R                  R                  X R                  R                  5      $ U R                  R                  U5      $ r   )r9  rq  rf  r   r   r   r  rel_to_builddir)r   r2  target_private_dirs      r^   rv  +FileMaybeInTargetPrivateDir.rel_to_builddir  sG    djj"89977<< 2JJ4D4DEEzz)),77r]   c                    [        U R                  [        5      (       a  [        S5      eU R                  R	                  X5      $ )NzUnreachable code)r9  rq  rf  RuntimeErrorabsolute_path)r   r.  r  s      r^   r{  )FileMaybeInTargetPrivateDir.absolute_path  s5    djj"899122zz''99r]   c                    U R                   $ r   rh  r   s    r^   r  #FileMaybeInTargetPrivateDir.__str__  ra  r]   rp  N)rq  z%T.Union[File, FileInTargetPrivateDir]r  )r2  r   rw  r   r   r   )r.  r   r  r   r   r   )rW   rX   rY   rZ   r  r5  propertyr  rv  r{  r  r\   rU   r]   r^   rn  rn    s-    ;    8
:
r]   rn  c                      \ rS rSrSSSS S.           SS jjrSS jrSS jrSS jrSS	 jrSS
 jr	   S         SS jjr
Srg)	Generatori  NF)depfilecapturedependsr   c               l    Xl         X@l        XPl        U=(       d    / U l        X l        X0l        Xpl        g r   )exer  r  r  arglistr  r   )r   r  	argumentsoutputr  r  r  r   s           r^   r5  Generator.__init__  s/     ZaZgeg 	r]   c                f    SnUR                  U R                  R                  U R                  5      $ )Nz
<{0}: {1}>)r  r  rW   r  r  s     r^   r  Generator.__repr__  s&    t~~66AAr]   c                    U R                   $ r   )r  r   s    r^   get_exeGenerator.get_exe  rl  r]   c                   [         R                  R                  U5      n[         R                  R                  U5      S   nU R                   Vs/ s H$  oDR                  SU5      R                  SU5      PM&     nnU$ s  snf Nr   
@BASENAME@@PLAINNAME@)r   r   basenamesplitextr  r5  )r   inname	plainnamer  r   basess         r^   get_base_outnamesGenerator.get_base_outnames  sm    GG$$V,	77##I.q1^b^j^jk^jYZ<2::=)T^jk ls   +A?c                   U R                   c  [        S5      e[        R                  R	                  U5      n[        R                  R                  U5      S   nU R                   R                  SU5      R                  SU5      $ )NzJTried to get dep name for rule that does not have dependency file defined.r   r  r  r  r   r   r   r  r  r5  )r   r  r  r  s       r^   get_dep_outnameGenerator.get_dep_outname  sj    <<"#oppGG$$V,	77##I.q1||##L(;CCMS\]]r]   c                   [         R                  R                  U5      n[         R                  R                  U5      S   nU R                   Vs/ s H$  oDR                  SU5      R                  SU5      PM&     sn$ s  snf r  )r   r   r  r  r  r5  )r   r  r  r  r   s        r^   get_arglistGenerator.get_arglist  sf    GG$$V,	77##I.q1]a]i]ij]iXY		,199-S]ijjjs   +A>c                   [        U UR                  UUb  UO/ Ub  UO	[        5       S9nU GH  n[        U[        [
        45      (       a_  UR                  R                  U5        UR                  5        Vs/ s H(  n[        R                  " UR                  5       U5      PM*     n	nO[        U[         5      (       aW  U(       a  [        S5      eUR                  R                  U5        UR                  5        Vs/ s H  n[        U5      PM     n	nOP[        U[        5      (       a8  [        R                  " UR                   R"                  UR                  U5      /n	OU/n	U	 H{  nU(       aU  UR%                  UR                   R"                  UR                   R&                  5      n
[)        X:5      (       d  [        S5      e[+        U5      nUR-                  X5        M}     GM     U$ s  snf s  snf )N)r  envzZgenerator.process: 'preserve_path_from' is not allowed if one input is a 'generated_list'.zmgenerator.process: When using preserve_path_from, all input files must be in a subdirectory of the given dir.)rF   r   r#   r9  rD   rE   r  r  r  r   r  r.  r   rf  r   r  r5   r  r{  	build_dirr   rn  add_file)r   r  statepreserve_path_fromr  r  r  er  fsabs_fs              r^   process_filesGenerator.process_files  s   
 LL%/%;z,@,BD A!l,=>??""1%GH}}W!d**1<<>1=WA}--%*  ,H  I  I""1%9:IA,Q/IAs##++E,=,=,H,H%,,XYZ[S%OOE,=,=,H,H%J[J[JeJefE)*<DD.  0_  `  `/2)  * % X
 Js   8/G.>G3)r  r  r  r  r  r   r  )r  /T.Union['Executable', programs.ExternalProgram]r  r   r  r   r  r   r  rO   r  zMT.Optional[T.List[T.Union[BuildTarget, 'CustomTarget', 'CustomTargetIndex']]]r   r   r  )r   r  )r  r   r   r   )NNN)r  zTT.Iterable[T.Union[str, File, 'CustomTarget', 'CustomTargetIndex', 'GeneratedList']]r  %T.Union['Interpreter', 'ModuleState']r  r   r  zT.Optional[T.List[str]]r   T.Optional[EnvironmentVariables]r   z'GeneratedList')rW   rX   rY   rZ   r5  r  r  r  r  r  r  r\   rU   r]   r^   r  r    s     -1!&jn('$
 *  h "B^k =A<@>B	!B!*9! #:! <	! HW	! !r]   r  c                      \ rS rSr% SrS\S'   S\S'   S\S'   S	\S
'   S\S'   SS jrSS jrSS jrSS jr	SS jr
SS jrSS jrSS jrSS jrSrg) rF   i  z The output of generator.process.r  	generatorr   r   r   r  r   r  r  r  c                   U R                   R                  U l        [        5       U l        / U l        / U l        0 U l        / U l        / U l	        U R                  c  / U l
        U R                  c  [        5       U l        [        U R                   R                  [        R                  5      (       a  U R                   R                  R!                  5       (       d  [#        S5      eU R                   R                  R%                  5       n[&        R(                  R+                  U5      (       a0  U R                  R-                  [.        R0                  " U5      5        g g g )Nz4Tried to use not-found external program as generator)r  r  r   r  r  
infilelistoutfilelistoutmapextra_dependsr  r  r  r#   r9  r   ExternalProgramfoundr   get_pathr   r   r  r   r   r  )r   r   s     r^   r  GeneratedList.__post_init__  s    NN&&	.1e?A(*HJ*,??"+-DO88-A-CDHdnn(((*B*BCC>>%%++--&']^^>>%%..0Dww}}T"" !!(()@)@)FG #	 Dr]   c                   / nUR                  UR                  R                  UR                  R                  5      n[        R
                  R                  U R                  5      (       d   e[        R
                  R                  XPR                  5      n[        R
                  R                  U5      nU H1  nUR                  [        R
                  R                  Xx5      5        M3     U$ r   )r{  r5   r  r  r   r   r  r  r    r  r   r   )	r   infileoutfilesr  r  in_absrelpath_segmentofs	            r^   add_preserved_path_segment(GeneratedList.add_preserved_path_segment  s     %%e&7&7&B&BEDUDUD_D_`ww}}T445555ggoof&=&=>wws+BMM"'',,|89 r]   c                   U R                   R                  U5        U R                  R                  UR                  5      nU R
                  (       a  U R                  XU5      nU =R                  U-  sl        X0R                  U'   g r   )	r  r   r  r  r  r  r  r  r  )r   newfiler  r  s       r^   r  GeneratedList.add_file&  sd    w'>>33GMMB""66w%PHH$'Gr]   c                    U R                   $ r   )r  r   s    r^   
get_inputsGeneratedList.get_inputs.  re  r]   c                    U R                   $ r   )r  r   s    r^   r  GeneratedList.get_outputs1  r*  r]   c                     U R                   U   $ r   )r  )r   r  s     r^   get_outputs_forGeneratedList.get_outputs_for4  s    {{8$$r]   c                    U R                   $ r   )r  r   s    r^   get_generatorGeneratedList.get_generator7  r|  r]   c                    U R                   $ r   rb  r   s    r^   rd  GeneratedList.get_extra_args:  re  r]   c                    U R                   $ r   r-  r   s    r^   r.  GeneratedList.get_subdir=  r  r]   )	r  r  r  r  r  r  r   r  r  Nr  )r  rn  r  r   r  r  r   r   )r  rn  r  r  r   r   )r   z#T.List[FileMaybeInTargetPrivateDir]r  )r  rn  r   r   )r   z'Generator'r  )rW   rX   rY   rZ   r  r[   r  r  r  r  r  r  r  rd  r.  r\   rU   r]   r^   rF   rF     sR     +K''	))H0( %r]   rF   c                     ^  \ rS rSr\rSr                  SU 4S jjrSU 4S jjrU 4S jr	SS jr
S rS rSS	 jrSS
 jrS rSS jrSS jrSS jrSrU =r$ )r:  iA  
executablec                  > [        S5      nSU
;  aA  XR                  R                  ;   a(  UR                  R                  R                  U5      U
S'   [        TU ]  XX4XVUXU
5
        U
R                  S5      =(       d    SU l        U
R                  S5      b  U
R                  S5      S;   d   eU
R                  SS5      U l        [        U R                  [        5      (       d  [        S	5      eU
R                  S
5      U l        [        U R                  [        [        [        S 5      45      (       d  [        S5      eU R                  U l        SU l        S U l        U R%                  U
5        g )Nr0  r   r   consoler   >   r  applicationr   Fz3"export_dynamic" keyword argument must be a booleanr   z="export_dynamic" keyword argument must be a boolean or string)r&   r   r  r  rz  r5  r}  r   r   r9  rO   r   r   r   r  is_linkwithablewas_returned_by_find_programr   r  )r   r   r   r   rP  rs   r|  rr   r5   r  rV  r  r  s               r^   r5  Executable.__init__F  s8     3*>*>*G*G#G'0099GGLF5Mz]d$	9#ZZ8EIzz,-5DV9W[x9xxx$jj)95A$--t44"#XYYjj*$++c4:'>??"#bcc#22,1)04&&v.r]   c                
  > [         TU ]  5         U R                  R                  U R                     n[        U S5      (       d  SU l        [        U S5      (       Gd  UR                  5       (       d%  UR                  5       (       d  SU R                  ;   a	  SU l
        GOUR                  R                  S5      (       d  UR                  S:X  a	  SU l
        GOS	U R                  ;   a1  U R                  S	   R                  5       R                  S
5      (       dA  SU R                  ;   a:  U R                  S   R                  5       R                  S
5      (       a	  SU l
        GOS	U R                  ;   a1  U R                  S	   R                  5       R                  S5      (       dA  SU R                  ;   a:  U R                  S   R                  5       R                  S5      (       a	  SU l
        GOlS	U R                  ;   a:  U R                  S	   R                  5       R                  S5      (       a	  SU l
        GO"S	U R                  ;   a!  U R                  S	   R                  5       S;   d1  SU R                  ;   a)  U R                  S   R                  5       S;   a  SU l
        OS	U R                  ;   a!  U R                  S	   R                  5       S;   d1  SU R                  ;   a)  U R                  S   R                  5       S;   a  SU l
        ONS	U R                  ;   a)  U R                  S	   R                  5       S:X  a  SU l
        OUR                  5       U l
        U R                  U l        U R                  (       a  U R                  U R                   -   U l        U R                  (       a"  U =R                   SU R                  -   -  sl        U R                   U R"                  S'   S U l        S U l        U R(                  (       a  U R                  S-   n[+        U R,                  [.        5      (       a  U R,                  nUR                  5       (       d  UR                  5       (       a+  U R1                  5       (       a  U S3U l        OSU S3U l        UR                  5       =(       a|    SU R                  ;   =(       d'    U R3                  5       =(       d    U R1                  5       =(       a8    U R                  R4                  R6                  R9                  [;        S5      5      nU(       a:  U R                  n[=        U SS5      S:w  a  USU R                  -   -  nUS-   U l        g g )Nr   r   rM  r  r  wasm
emscriptenjsr  armclangrr  axfccrxabsxc16elf>   tic2000c6000out>   mwccarmmwcceppcneftaskingr   r   z.exer#  r  .arQ   r  .pdb)rz  r  r5   r@  rP  r  r   rB  	is_cygwinr  rM  r  r;  r  get_exe_suffixr   r  r  import_filenamer  r   r9  r   r   r  r  r   r  r  r&   r   )r   r  implib_basenamecreate_debug_filer   r  s        r^   r  Executable.post_inith  s   ""++D,<,<= tX&&DKtX&&!!##w'8'8':':ddnn>T#**622gnn6T"'DNN3,?,F,F,H,S,ST^,_,_4>>)dnnU.C.J.J.L.W.WXb.c.c#'DNN3,?,F,F,H,S,STZ,[,[4>>)dnnU.C.J.J.L.W.WX^._._#'DNN3,?,F,F,H,S,STZ,[,[#'DNN3,?,F,F,HLd,d4>>)dnnU.C.J.J.LPh.h#'DNN3,?,F,F,HLc,c4>>)dnnU.C.J.J.LPg.g#'DNN3,?,F,F,HI,U#%446		;; KK$--7DM;;MMS4;;..M--Q  $" "ii&0O$++s++"&++!!##w'8'8':':&&((.=->d+CD(-00A+DD(   U'T4>>+;Tt?R?R?TU   ))22@@7AST	 	 
 99DtXu-6dkk))"&-D r]   c                   > [         TU ]  U5        UR                  S5      =(       d    SU l        U R                  S:w  a  [	        S5      eg )Nri   binz7Invalid rust_crate_type: must be "bin" for executables.)rz  r  r}  ri   r   )r   rV  r  s     r^   r  Executable.process_kwargs  sF    v&%zz*;<E5("#\]] )r]   c                :    U R                   R                  5       S4$ )Nz{bindir})r5   
get_bindirr   s    r^   r  "Executable.get_default_install_dir  r&  r]   c                    U R                   $ )z,Human friendly description of the executabler)  r   s    r^   descriptionExecutable.description  s    yyr]   c                    g)Nz@exerU   r   s    r^   r  Executable.type_suffix      r]   c                    U 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   s    r^   get_import_filenameExecutable.get_import_filename       ###r]   c                    U R                   $ rY  rZ  r   s    r^   r[  Executable.get_debug_filename  r]  r]   c                    U R                   $ r   )r  r   s    r^   r^  Executable.is_linkable_target  s    ###r]   c                    U R                   $ )zqProvides compatibility with ExternalProgram.

Since you can override ExternalProgram instances with Executables.
r_  r   s    r^   get_commandExecutable.get_command  s    
 ||r]   c                j    [         R                  R                  U R                  U R                  5      $ ),Provides compatibility with ExternalProgram.)r   r   r   r   r  r   s    r^   r  Executable.get_path  s    ww||DKK77r]   c                    g)r  TrU   r   s    r^   r  Executable.found  s    r]   )r  r   r  r   r  r  r   ri   rM  r   r  r   r   r   r   r   r   r=   rP  r   rs   rJ  r|  rK  rr   rL  r5   r  r  rM  r  rh  r   )r   z'ImmutableListProtocol[str]'r  r  )rW   rX   rY   rZ   known_exe_kwargsr  r  r5  r  r  r  r  r  r  r[  r^  r  r  r  r\   rc  rd  s   @r^   r:  r:  A  s    #LH / /  / #	 /
 ' / - / !> / ) / 1 / / /DD0L^9$#$8 r]   r:  c                     ^  \ rS rSr\rSr                  SU 4S jjrSU 4S jjrSS jr	SS jr
S rU 4S jrS	 rSS
 jrSS jrSSS jjrSrU =r$ )rH   i  zstatic libraryc                   > [         R                  " SU
R                  SS5      5      U l        [        TU ]  XX4XVUXU
5
        g )NrO   r   F)rN  rO  r}  r   rz  r5  r   r   r   r   rP  rs   r|  rr   r5   r  rV  r  s              r^   r5  StaticLibrary.__init__  s=     vvffjjE&BCz]d$	9r]   c                R  >^  [         TT ]  5         ST R                  ;   a  [        S5      eT R	                  5       (       a  T R
                  S:X  a@  [        U 4S jS 5       5      (       a&  [        ST R                   ST R
                   S35      eT R
                  S	:X  aW  T R                  S
   n[        R                  " S/ / UR                  / / / / / 0 / / / S5      nT R                  R                  U5        [        T S5      (       d  ST l        [        T S5      (       Gd   T R	                  5       (       a0  T R
                  S:X  a  ST l        OT R
                  S	:X  a  ST l        OST l        ST R                  ;   a  T R                  S   R!                  5       S:X  a  T R"                  (       dr  [%        ST R&                  T R(                  5      n T R*                  R,                  R/                  T U5      n[7        U[8        5      (       d   S5       eU(       a  ST l        T R                  T R                  -   S-   T R                  -   T l        T R:                  T R<                  S'   g ! [0         a2    T R*                  R,                  R2                  R5                  U5      n Nf = f)Nr  z&Static libraries not supported for C#.r  c              3  @   >#    U  H  oTR                   ;   v   M     g 7fr   r)  r   r  r   s     r^   r   *StaticLibrary.post_init.<locals>.<genexpr>  s     5^o499nor  r!   r   Rust crate  type  does not allow spaces, periods or dashes in the library name due to a limitation of rustc. Replace them with underscores, for example	staticlibr  r  _rust_native_static_libsr   r  rM  r  r  r  b_ltozfor mypymar   r   )rz  r  r  r   r  ri   r  r   r   r  native_static_libsr}  r   r  r   rM  r  r   r&   r   rP  r5   r   get_option_for_targetr  r  r  r9  rO   r  r  )r   rustcr  r  rJ  r  s   `    r^   r  StaticLibrary.post_init  sK   4>>!"#KLL>>##v-#5^o5^2^2^&TYYKvdFZFZE[ \T (T U U ##{2 v. 33KR494L4L46BBBPRTV4NP ""))!, tX&&DKtX&&~~''61"(DK))[8"%DK!$..(T^^C-@-G-G-IY-V_c_k_k#GT__d>N>NOCR ,,55KKDRUV &a..:
:.&*dii/#5C--Q $ R ,,55>>LLSQRs   &I* *9J&%J&c                    0 $ r   rU   r  s     r^   r  #StaticLibrary.get_link_deps_mapping0	  rc  r]   c                :    U R                   R                  5       S4$ )Nz{libdir_static})r5   get_static_lib_dirr   s    r^   r  %StaticLibrary.get_default_install_dir3	      2246GGGr]   c                    g)Nz@starU   r   s    r^   r  StaticLibrary.type_suffix6	  r  r]   c                  > [         TU ]  U5        UR                  S5      nUR                  S5      nU(       a=  U(       a  [        S5      eUS:X  a  SU l        g US;   a  X0l        g [        SU< S35      eUS	:X  a  S
OSU l        g )Nr   ri   4rust_abi and rust_crate_type are mutually exclusive.r  r  >   r  r%  Crate type z< invalid for static libraries; must be "rlib" or "staticlib"r  r%  )rz  r  r}  r   ri   r   rV  r   ri   r  s       r^   r  StaticLibrary.process_kwargs9	  s    v&::j) **%67&']^^%''-$ $99'6$&_4G  HD  (E  F  F2:c/;vD r]   c                    gNTrU   r   s    r^   r^   StaticLibrary.is_linkable_targetJ	      r]   c                $    U R                   (       + $ r   rv  r   s    r^   rn  StaticLibrary.is_internalM	  s    <<r]   c                \    [         R                   " U5      U l        S U R                  l        g r   rF  r  )r   shared_librarys     r^   
set_sharedStaticLibrary.set_sharedP	      		.1!%r]   c                    U nUS:X  a  U R                   =(       d    U nU(       a1  U R                   Vs/ s H  oDR                  US5      PM     snUl        U$ s  snf )Nr
  Tr  r  r}  r   r  r  r  r;  s        r^   r}  StaticLibrary.getT	  S    x]]*dFBFBSBS"TBSQ554#8BS"TF #U   A)r  r  r   r   ri   rM  r  r  rP  rh  r  )rB  rG   r   r   rW  r  r[  r  rO   r   r\  )rW   rX   rY   rZ   known_stlib_kwargsr  r  r5  r  r  r  r  r  r^  rn  rC  r}  r\   rc  rd  s   @r^   rH   rH     s    %LH99 9 #	9
 '9 -9 !>9 )9 19 /9 7(rHN" & r]   rH   c                     ^  \ rS rSr\rSrSr                  SU 4S jjrSU 4S jjr	SS jr
SS jrS rU 4S	 jrSS
 jrSS jrSS jrS rS rSS jrSSS jjrSrU =r$ )rG   i\	  zshared libraryTc                   > S U l         S U l        S U l        S U l        S U l        S U l        SU l        [        TU ]!  XX4XVUXU
5
        g r]  )	r   	ltversionr   r   r  r  shared_library_onlyrz  r5  r  s              r^   r5  SharedLibrary.__init__d	  sV     +/*.>B"#"#( z]d$	9r]   c                |  >^  [         TT ]  5         T R                  5       (       aP  T R                  S:w  a@  [	        U 4S jS 5       5      (       a&  [        ST R                   ST R                   S35      e[        T S5      (       d  S T l        [        T S5      (       d  S T l	        S	T l
        T R                  5         g )
Ncdylibc              3  @   >#    U  H  oTR                   ;   v   M     g 7fr   r)  r  s     r^   r   *SharedLibrary.post_init.<locals>.<genexpr>	  s     7`P_1TYYP_r  r   r"  r#  r$  r   rM  {0.prefix}{0.name}.{0.suffix})rz  r  r  ri   r  r   r   r  r   rM  basic_filename_tpldetermine_filenames)r   r  s   `r^   r  SharedLibrary.post_init~	  s    >>##x/C7`P_7`4`4`&TYYKvdFZFZE[ \T (T U U tX&&DKtX&&DK"A  "r]   c                    0 nU R                  U5      n[        U 5      nXC;  aY  U R                  5       nU R                  5       u  n  n[        R
                  R                  XS   U5      nUR                  XH05        UR                  U5        U$ r  )r  r   rV  r&  r   r   r   r;  )	r   r   r  mappingsoldr  r#  r  news	            r^   r  #SharedLibrary.get_link_deps_mapping	  s    #%88@1$7%%'E 002MGQ'',,vqz59CMM3*%r]   c                :    U R                   R                  5       S4$ )Nz{libdir_shared})r5   get_shared_lib_dirr   s    r^   r  %SharedLibrary.get_default_install_dir	  r2  r]   c                   SnSnSnU R                   U l        SnSU R                  ;   a  SnSnSU l        SnGOXU R                  R                  U R
                     R                  5       (       a  SnU R                  5       (       a=  SnSnU R                  R                  R                  R                  [        S	5      5      nOVU R                  5       (       a=  SnS
nU R                  R                  R                  R                  [        S	5      5      nOSnSnU R                  (       a	  SU l        GO^SU l        GOUU R                  R                  U R
                     R                  5       (       aE  SnSnU R                  b  U R                  OSnUS-   nU R                  (       a  SU l        OSU l        OU R                  R                  U R
                     R!                  5       (       a%  SnSnU R                  (       a  SU l        OSU l        OU R                  R                  U R
                     R#                  5       (       a  SnSnSU l        O=SnSnU R$                  (       a  SU l        O U R                  (       a  SU l        OSU l        U R                  c  Xl        U R&                  c  X l        U R                  R)                  U 5      U l        U(       a  UR)                  U 5      U l        U R*                  U R.                  S'   U(       a5  [0        R2                  R5                  U R*                  5      S   S-   U l        gg)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 (self.import_filename),
which is only used on Windows since on that platform the linker uses a
separate library called the "import library" during linking instead of
the shared library (DLL).
r   FNr  dllrW  Tz{0.prefix}{0.name}.dll.librQ   z{0.prefix}{0.name}.libr  z{0.prefix}{0.name}.dll.az+{0.prefix}{0.name}-{0.soversion}.{0.suffix}cygz{0.name}.dll.ar  z+{0.prefix}{0.name}.{0.soversion}.{0.suffix}soz+{0.prefix}{0.name}.{0.suffix}.{0.ltversion}z+{0.prefix}{0.name}.{0.suffix}.{0.soversion}r   r  )rX  filename_tplr  r5   r@  rP  rB  r  r   r  r  r&   r  r   r  r   rA  rD  rP  rM  r  r  r  r  r   r   r  r  )r   r   rM  r  import_filename_tplimport_prefixs         r^   rY  !SharedLibrary.determine_filenames	  s    ! 33" 4>>!FF ?D $ &&t'7'78CCEEF~~&B#$($4$4$=$=$F$F$T$TU^_fUg$h!$$&&&>#$($4$4$=$=$F$F$T$TU^_fUg$h! &@#~~$Q!$C!&&t'7'78BBDDF F+/;;+BDKKM"/2B"B~~$Q!$C!&&t'7'78BBDDFF~~$Q! %D!&&t'7'78CCEEFF ?DFF~~$Q!$Q! %D!;; K;; K))006#6#=#=d#CD  --Q"$''"2"24=="A!"Dv"MD r]   c                  > [         TU ]  U5        U R                  R                  U R                     R                  5       (       d  [        R                  " SUR                  S5      5      U l	        [        R                  " SUR                  S5      5      U l
        U R                  c0  U R                  b#  U R                  R                  S5      S   U l
        [        R                  " SUR                  S5      5      U l        U R                  c*  U R                  b  U R                  U R                  4U l        U R                  U5        UR                  S5      nUR                  S	5      nU(       a=  U(       a  [        S
5      eUS:X  a  SU l        g US;   a  X0l        g [        SU< S35      eUS:X  a  SOSU l        g )Nr   r   r   r   r   zT.Optional[T.Tuple[str, str]]r   r   ri   r6  r  r  >   r  rT  rm  r7  zH invalid for shared libraries; must be "dylib", "cdylib" or "proc-macro"r  rT  )rz  r  r5   r@  rP  rD  rN  rO  r}  rP  r   r)  r   r  r   ri   r8  s       r^   r  SharedLibrary.process_kwargs

  sw   v&(()9)9:EEGGVV$5vzz)7LMDNVV$5vzz+7NODN~~%$..*D "&!5!5c!:1!=#$66*I6::VgKh#iD ##+0J(,'G$ 	&&v.::j) **%67&']^^%''.$ $EE'6$&_4G  HP  (Q  R  R/738GD r]   c                    U R                   $ r  r  r   s    r^   r  !SharedLibrary.get_import_filename-
  r	  r]   c                    U R                   $ rY  rZ  r   s    r^   r[   SharedLibrary.get_debug_filename5
  r]  r]   c                ,   / nU R                   S;  d  U R                  (       d  U$ U R                   S:X  a  U R                  (       a}  U R                  U R                  :w  ac  U R                  R	                  SS5      nUR                  U 5      nU R                  S   =(       d    SnUR                  X0R                  U45        OU R                  nU R                  S   =(       d    SnUR                  U R                  R                  U 5      X445        U$ )z
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
)rf  r  rf  rP  r   r   runtimer  )
rM  r   rP  rg  r5  r  rz   r   r  rX  )r   aliases	alias_tplltversion_filenametags        r^   r  SharedLibrary.get_aliases=
  s     35 ;;o-T^^N
 ;;$4>>dnn6V))11+{KI!*!1!1$!7""1%2CNN.sCD "& q!,W//66t<>PVWr]   c                    g)Nz@sharU   r   s    r^   r  SharedLibrary.type_suffix]
  r  r]   c                    gr;  rU   r   s    r^   r^   SharedLibrary.is_linkable_target`
  r=  r]   c                \    [         R                   " U5      U l        S U R                  l        g r   rA  )r   static_librarys     r^   
set_staticSharedLibrary.set_staticc
  rE  r]   c                    U nUS:X  a  U R                   =(       d    U nU(       a1  U R                   Vs/ s H  oDR                  US5      PM     snUl        U$ s  snf )Nr	  TrG  rH  s        r^   r}  SharedLibrary.getg
  rJ  rK  )rX  r  r   r  r  rg  r  rP  r   ri   rQ  r   rM  r   r  r  rP  rh  r   rZ  )r}  rH   r   r   rW  rL  )rW   rX   rY   rZ   known_shlib_kwargsr  r  aix_so_archiver5  r  r  r  rY  r  r  r[  r  r  r^  r~  r}  r\   rc  rd  s   @r^   rG   rG   \	  s    %LH N99 9 #	9
 '9 -9 !>9 )9 19 /94# 
HkNZ!LF$#@& r]   rG   c                  f   ^  \ rS rSr\rSrSr                  SU 4S jjrSS jr	Sr
U =r$ )	r  iq
  zshared moduleFc                   > SU
;   a  [        S5      eSU
;   a  [        S5      e[        TU ]	  XX4UXgXU
5
        SU l        g )Nr   z2Shared modules must not specify the version kwarg.r   z4Shared modules must not specify the soversion kwarg.F)r   rz  r5  r  r  s              r^   r5  SharedModule.__init__y
  sR      !UVV&  !WXXz+kf	V "r]   c                :    U R                   R                  5       S4$ )Nz{moduledir_shared})r5   get_shared_module_dirr   s    r^   r  $SharedModule.get_default_install_dir
  s    5579MMMr]   )r  r  rh  )rW   rX   rY   rZ   known_shmod_kwargsr  r  r  r5  r  r\   rc  rd  s   @r^   r  r  q
  s}    %LH N"" " #	"
 '" -" !>" )" 1" /",N Nr]   r  c                  F    \ rS rSrS	S jrS
S jrSS jrSS jrS
S jrSr	g)r  i
  c                ^    X0l         Xl        X l        U R                  R                  U l        g r   _preferred_libraryr
  r	  r   )r   r
  r	  preferred_librarys       r^   r5  BothLibraries.__init__
  s#    "3++00r]   c                `    S[        U R                  5       S[        U R                  5       S3$ )Nz<BothLibraries: static=z	; shared=>)reprr	  r
  r   s    r^   r  BothLibraries.__repr__
  s,    (dkk):(;9T$++EVDWWXYYr]   c                j    US:X  a  U R                   $ US:X  a  U R                  $ U R                  5       $ )Nr	  r
  )r	  r
  get_default_objectr  s     r^   r}  BothLibraries.get
  s5    x;;x;;&&((r]   c                    U R                   S:X  a  U R                  $ U R                   S:X  a  U R                  $ [        SU R                    S35      e)Nr
  r	  zself._preferred_library == "z#" is neither "shared" nor "static".)r  r
  r	  r"   r   s    r^   r   BothLibraries.get_default_object
  sO    ""h.;;$$0;;">t?V?V>WWz {||r]   c                >    U R                  5       R                  5       $ r   )r  r  r   s    r^   r  BothLibraries.get_id
  s    &&(//11r]   r  N)r
  rG   r	  rH   r  zLiteral['shared', 'static']r   r   r  )r  r[  r   %T.Union[StaticLibrary, SharedLibrary])r   r  )
rW   rX   rY   rZ   r5  r  r}  r  r  r\   rU   r]   r^   r  r  
  s    1Z)}2r]   r  c                  B    \ rS rSr% S\S'   S\S'   S\S'     SS jrS	rg
)CommandBasei
  r   r  z,T.List[T.Union[BuildTarget, 'CustomTarget']]r   r   r   c           	        [        U5      n/ nU GHJ  n[        U[        5      (       a  UR                  U5        M,  [        U[        5      (       a.  U R
                  R                  U5        UR                  U5        Mo  [        U[        R                  5      (       a  UR                  5       (       d  [        S5      eUR                  5       n[        R                  R                  U5      (       a/  U R
                  R                  [        R                  " U5      5        UR                  U5        GM%  [        U[        [         45      (       a/  U R"                  R                  U5        UR                  U5        GMo  [        U[$        5      (       a  [&        R(                  " SSU R*                  5        U R"                  R                  UR,                  5        X R/                  [        R0                  " UR3                  5       UR5                  5       5      5      -  nGM  [        U[6        5      (       a  X R/                  U5      -  nGM=  [        SU< S35      e   U$ )Nz4Tried to use not-found external program in "command"z&CustomTargetIndex for command argumentz0.60rK  z in "command" is invalid)r   r9  r   r   r   r  r   r  r  r   r  r   r   r  r  rI   rD   r   rE   r0   r  r   r  flatten_commandr  r.  rV  rD  )r   cmd	final_cmdr  r   s        r^   r  CommandBase.flatten_command
  s   clMO	A!S!!  #At$$!!((+  #Ax7788wwyy*+abbzz|77==&& %%,,T-D-DT-JK  #A\:;;!!((+  #A011%%&NPVX\XgXgh!!((211$2F2Fq||~WXWeWeWg2hii	At$$11!44	&1%7O'PQQ5 6 r]   rU   N)r  zJT.Sequence[T.Union[str, File, programs.ExternalProgram, BuildTargetTypes]]r   zOT.List[T.Union[str, File, BuildTarget, CustomTarget, programs.ExternalProgram]])rW   rX   rY   rZ   r[   r  r\   rU   r]   r^   r  r  
  s     >>O[r]   r  c                  V    \ rS rSrSrSrSSS jjrSS jrSS jrSS jr	SSS jjr
S	rg
)CustomTargetBasei
  zBase class for CustomTarget and CustomTargetIndex

This base class can be used to provide a dummy implementation of some
private methods to avoid repeating `isinstance(t, BuildTarget)` when dealing
with custom targets.
r   c                    g r   rU   )r   r  ro  s      r^   rh  )CustomTargetBase.get_dependencies_recurse
      r]   c                    [        5       $ r   r   r   s    r^   r  .CustomTargetBase.get_internal_static_libraries
  
    |r]   c                    g r   rU   r  s     r^   r  6CustomTargetBase.get_internal_static_libraries_recurse
  r  r]   c                    / $ r   rU   r   s    r^   r  'CustomTargetBase.get_all_linked_targets
  rc  r]   c                    U $ r  rU   )r   r  r  s      r^   r}  CustomTargetBase.get
  r  r]   rU   NrN  )r  rT  ro  rO   r   r   rS  rX  rO  rW  rL  )rW   rX   rY   rZ   r  ri   rh  r  r  r  r}  r\   rU   r]   r^   r  r  
  s,     O r]   r  c                    ^  \ rS rSrSrSSSSSSSSSSSSSSSSSS.                                               S%U 4S jjjrS&S jrS	 rS'S
 jrS(S jr	S r
S)S jrS*S jrS+S jrS,S jrS-S jrS.S jrS/S jrS/S jrS rS0S jrS)S jrS)S jrS1S jrS2S jrS rS)S jrS3S jrS rS4S jrS  rS! rS" r S5S# jr!S$r"U =r#$ )6rD   i
  customFNz#Generating {} with a custom command)r  r   r  r  r  r  r  r  feedrq   ry   r}   rz   rspableabsolute_pathsbackendr  c          
       > [         TU ]  XUS[        R                  UUU5        [	        U5      U l        [        U[        [        UU5      / 5      5      U l	        U	b  U	OUU l
        Xl        Xl        [	        U=(       d    / 5      U l        / U l        U R                  U5      U l        Xl        U=(       d
    [%        5       U l        [	        U=(       d    / 5      U l        UU l        [	        U=(       d    / 5      U l        UU l        [1        U[3        U R                  5      5      U l        U(       a  UOU R                  S   U l        UU l        UU l        UU l        g )NFr   )rz  r5  r   HOSTrD  rs   r   r   get_sources_string_namesr  r   r  r  r  r   r  commandr  r#   r  r  r  ry   r}   r   r   rz   r   r  r  r  )r   r   r   r   r5   r  rs   r  r  r   r  r  r  r  r  r  r  rq   ry   r}   rz   r  r  r  r  r  s                            r^   r5  CustomTarget.__init__
  s0   @ 	z5-:L:Lk "4	6G}(1(': 5E4P 0V] !34HJ++G40.0!-"526	 1r2(/S=NO Ddll1o	& - r]   c                    g)N)NNrU   r   s    r^   r  $CustomTarget.get_default_install_dir0      r]   c                    SnUR                  U R                  R                  U R                  5       U R                  5      $ r  r  r  rW   r  r  r  s     r^   r  CustomTarget.__repr__3  s.    #t~~66t||TTr]   c                d   / nUR                  U R                  5        UR                  U R                  5        U R                   Hg  n[	        U[
        5      (       a  UR                  UR                  5        M5  [	        U[        R                  5      (       a  MV  UR                  U5        Mi     U$ r   )
r  r   r  rs   r9  rE   r   r  r   r  )r   r  r  s      r^   get_target_dependencies$CustomTarget.get_target_dependencies7  s|    46D%%&D&&'A!.//AHH%8#;#;<<A	 
 r]   c                   [        5       nU R                  5       nU Ha  n[        U[        5      (       a  UR	                  U5        M+  [        U[
        5      (       d  MB  UR                  UR                  5       5        Mc     U$ )aZ  
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  r9  rI   r  rD   r;   get_transitive_build_target_deps)r   bdepsr  r  s       r^   r  -CustomTarget.get_transitive_build_target_depsB  se     >AU++-A![))		!A|,,Q??AB	 
 r]   c                    U R                   $ r   r   r   s    r^   rj  CustomTarget.get_dependenciesT  r{  r]   c                    U R                   $ r   rv  r   s    r^   re  CustomTarget.should_installW  r   r]   c                    U R                   $ r   r(  r   s    r^   r   #CustomTarget.get_custom_install_dirZ  r*  r]   c                    U R                   $ r   r,  r   s    r^   r   $CustomTarget.get_custom_install_mode]  r{  r]   c                    U R                   $ r   r_  r   s    r^   r  CustomTarget.get_outputs`  r   r]   c                     U R                   S   $ r  r_  r   s    r^   rV  CustomTarget.get_filenamec  s    ||Ar]   c                    U R                   $ r   r   r   s    r^   r   CustomTarget.get_sourcesf  r   r]   c                    / nU R                    H+  n[        U[        5      (       d  M  UR                  U5        M-     U$ r   )rs   r9  rF   r   )r   genlistsr  s      r^   get_generated_lists CustomTarget.get_generated_listsi  s5    *,A!]++"  r]   c                "    U R                  5       $ r   )r  r   s    r^   rz  "CustomTarget.get_generated_sourcesp  s    ''))r]   c                   U R                   c  [        S5      eU(       ap  [        R                  R	                  US   5      n[        R                  R                  U5      S   nU R                   R                  SU5      R                  SU5      $ SU R                   ;   d  SU R                   ;   a  [        S5      eU R                   $ )NzOTried to get depfile name for custom_target that does not have depfile defined.r   r  r  zKSubstitution in depfile for custom_target that does not have an input file.r  )r   infilenamesr  r  s       r^   r  CustomTarget.get_dep_outnames  s    <<"#tuu((Q8Iww''	215H<<''h?GGW`aat||+}/L&'tuu<<r]   c                l    UR                  S5      (       a  g[        R                  " SU5      (       a  gg)N)r  r"  r#  r$  r   Tz\.so(\.\d+)*$F)r  r`  search)r   r  s     r^   is_linkable_outputCustomTarget.is_linkable_output  s-    ??BCC99%v..r]   c                r    [        U R                  5      S:w  a  gU R                  U R                  S   5      $ )Nr
   Fr   )r   r  r  r   s    r^   r^  CustomTarget.is_linkable_target  s/    t||!&&t||A77r]   c                j    [         R                  R                  U R                  S   5      S   nU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   sufs     r^   r  CustomTarget.links_dynamically  s0     ggt||A/3.((r]   c                    0 $ r   rU   r  s     r^   r  "CustomTarget.get_link_deps_mapping  rc  r]   c                    [        5       $ r   r  r   s    r^   r!  !CustomTarget.get_link_dep_subdirs  r  r]   c                    / $ r   rU   r   s    r^   r  CustomTarget.get_all_link_deps  rc  r]   c                    [        U R                  5      S:w  a  g[        X R                  S   5      R                  5       $ )z9
Returns True if this is a not installed static library.
r
   Fr   )r   r  rE   rn  r   s    r^   rn  CustomTarget.is_internal  s4     t||! ||A7CCEEr]   c                "    U R                  5       $ r   )r  r   s    r^   r
   CustomTarget.extract_all_objects  s    !!r]   c                    g)Nz@cusrU   r   s    r^   r  CustomTarget.type_suffix  r  r]   c                2    [        X R                  U   5      $ r   )rE   r  r   indexs     r^   __getitem__CustomTarget.__getitem__  s     ||E':;;r]   c                    [         er   r  )r   r  r  s      r^   __setitem__CustomTarget.__setitem__  r  r]   c                    [         er   r  r  s     r^   __delitem__CustomTarget.__delitem__  r  r]   c              #  L   #    U R                    H  n[        X5      v   M     g 7fr   )r  rE   )r   r$  s     r^   __iter__CustomTarget.__iter__  s     A#D,, r7  c                ,    [        U R                  5      $ r   )r   r  r   s    r^   __len__CustomTarget.__len__  s    4<<  r]   )r  r   r  r  r  r  r   r  r  r  r  r  ry   r}   rz   r   r  r  rs   )0r   r   r   r   r   r   r5   r  r  zYT.Sequence[T.Union[str, BuildTargetTypes, GeneratedList, programs.ExternalProgram, File]]rs   zkT.Sequence[T.Union[str, File, BuildTargetTypes, ExtractedObjects, GeneratedList, programs.ExternalProgram]]r  r   r  rO   r   r   r  rO   r  rO   r  z$T.Optional[T.Sequence[FileOrString]]r  z3T.Optional[T.Sequence[T.Union[str, SourceOutputs]]]r  r   r  r  r  rO   rq   rO   ry   z0T.Optional[T.List[T.Union[str, Literal[False]]]]r}   zT.Optional[FileMode]rz   #T.Optional[T.List[T.Optional[str]]]r  rO   r  rO   r  zT.Optional['Backend']r  r   rh  )r   z#T.List[T.Union[SourceOutputs, str]])r   z+T.Set[T.Union[BuildTarget, 'CustomTarget']]r  ri  rR  r  r  )r   zcT.List[T.Union[str, File, BuildTarget, GeneratedTypes, ExtractedObjects, programs.ExternalProgram]])r   zT.List[GeneratedList])r  r   r   rO   rP  rQ  r   z(T.List[T.Union[str, 'ExtractedObjects']])r  intr   z'CustomTargetIndex')r   r  )$rW   rX   rY   rZ   r  r5  r  r  r  r  rj  re  r   r   r  rV  r   r  rz  r  r  r^  r  r  r!  r  rn  r
  r  r  r  r  r  r
  r\   rc  rd  s   @r^   rD   rD   
  s   H -26:!&!&FJVZ,09=#!&QU6:DH!&(-26$I;<&<< !< 6	<
6<?< &< &*< $4< <  !<"  D#<$ !T%<& *'<( 7)<* +<, -<. O/<0  41<2 B3<4 5<6 "&7<8 09<: ";< <|U	$! !*
 8
)F"<""-! !r]   rD   c                     ^  \ rS rSrSrSr                        S	U 4S jjrS
S jrSS jrSS jr	Sr
U =r$ )CompileTargeti  zp
Target that only compile sources without linking them together.
It can be used as preprocessor, or transpiler.
ra  c                  > UR                  5       U0nSUR                  U	0U
US.n[        TU ]  XX7R                  US / XMU5
        Xl        Xpl        X`l        / U l        0 U l	        [        U=(       d    / 5      U l        U R                   H  nU R                  U5        M     U R                   HR  nUR                  5        H;  nUR!                  U UU5      nU R                  ["        R$                  " U5      5        M=     MT     g )NF)r   rx  r   r   )r~  r  rz  r5  rP  r  rR  output_templr  sources_maprD  r  rs   _add_outputr  r  get_target_generated_dirr   from_built_relative)r   r   r   r   r5   rs   r  rR  r  compile_argsr   r   r  r  rV  r  r  r  rel_srcr  s                      r^   r5  CompileTarget.__init__  s     **,h7	 %&//>#6(	
 	z3G3G $KF	L (.0GMr*AQ nnF'')!::4K  !9!9'!BC * %r]   c                    g)Nz@compilerU   r   s    r^   r  CompileTarget.type_suffix  r  r]   c                D   [         R                  R                  UR                  5      n[         R                  R	                  U5      S   nU R
                  R                  SU5      R                  SU5      nU R                  R                  U5        X@R                  U'   g r  )
r   r   r  r  r  r  r5  r  r   r  )r   r  r  r  r  s        r^   r  CompileTarget._add_output  sy    GG$$QWW-	77##I.q1%%lH=EEmU^_Ar]   c           
         / nU R                    H;  nXR                  5        Vs/ s H  n[        SUR                  U5      PM     sn-  nM=     U$ s  snf r;  )r  r  r   r   )r   gen_headersr   r  s       r^   get_generated_headers#CompileTarget.get_generated_headers  sN    $&<<C?PQ?P!Dszz15?PQQK   Rs   !A)rR  r  r  r  r  r  )r   r   r   r   r   r   r5   r  rs   rJ  r  r   rR  r8   r  r7   r  r   r   rR   r   rU  r  =T.List[T.Union[BuildTarget, CustomTarget, CustomTargetIndex]]r  )r  r   r   r   r   )rW   rX   rY   rZ   r  r  r5  r  r  r   r\   rc  rd  s   @r^   r  r    s    
 H!D!D!D !!D 6	!D
 2!D  #!D $!D "!D  +!D ':!D  ?!D X!DF  r]   r  c                     ^  \ rS rSrSr  S             SU 4S jjjrSS jrSS jrSS jrSS jr	SS jr
SS	 jrSS
 jrSS jrSrU =r$ )	RunTargeti  runc	                   > [         T	U ]  XUS[        R                  U5        X0l        / U l        U R                  U5      U l        SU l        Xpl	        Xl
        g r]  )rz  r5  r   r  r   r  r  r  r  r  default_env)
r   r   r  r   r   r   r5   r  r'  r  s
            r^   r5  RunTarget.__init__  sS     	z5-:M:M{[(++G4#&r]   c                    SnUR                  U R                  R                  U R                  5       U R                  S   5      $ )Nr  r   r  r  s     r^   r  RunTarget.__repr__  s3    #t~~66t||TUWWr]   c                    U R                   $ r   r   r   s    r^   rj  RunTarget.get_dependencies  r{  r]   c                    / $ r   rU   r   s    r^   rz  RunTarget.get_generated_sources  rc  r]   c                    / $ r   rU   r   s    r^   r   RunTarget.get_sources  rc  r]   c                    gr]  rU   r   s    r^   re  RunTarget.should_install  r`  r]   c                    U R                   $ r   r)  r   s    r^   rV  RunTarget.get_filename  rp  r]   c                    [        U R                  [        5      (       a  U R                  /$ [        U R                  [        5      (       a  U R                  $ [	        S5      e)NzBRunTarget: self.name is neither a list nor a string. This is a bug)r9  r   r   rD  rz  r   s    r^   r  RunTarget.get_outputs   sF    dii%%II;		4((99cddr]   c                    g)Nz@runrU   r   s    r^   r  RunTarget.type_suffix(  r  r]   )r  r  r'  r  r   r  r;  )r   r   r  zJT.Sequence[T.Union[str, File, BuildTargetTypes, programs.ExternalProgram]]r   z.T.Sequence[T.Union[Target, CustomTargetIndex]]r   r   r   r   r5   r  r  r  r'  rO   r  )r   r"  )r   zT.List[GeneratedTypes]r   r  r  )rW   rX   rY   rZ   r  r5  r  rj  rz  r   re  rV  r  r  r\   rc  rd  s   @r^   r$  r$    s    H :>%)'d'M' ' !	'
 6' 7' #' '"X!e r]   r$  c                  B   ^  \ rS rSrSr      SU 4S jjrS rSrU =r$ )AliasTargeti+  aliasc                *   > [         TU ]  U/ X#XE5        g r   )rz  r5  )r   r   r   r   r   r5   r  s         r^   r5  AliasTarget.__init__/  s    r<Qr]   c                n    SnUR                  U R                  R                  U R                  5       5      $ )Nz	<{0} {1}>)r  r  rW   r  r  s     r^   r  AliasTarget.__repr__3  s(    t~~66FFr]   rU   )
r   r   r   zT.Sequence[Target]r   r   r   r   r5   r  )	rW   rX   rY   rZ   r  r5  r  r\   rc  rd  s   @r^   r:  r:  +  s5    HRR*-R<SRG Gr]   r:  c                  |   ^  \ rS rSr\rSr        SU 4S jjrS rS r	S r
SS jrS rS	 rS
 rSS jrSrU =r$ )Jari7  jarc                  > [         TU ]  XX4XVUXU
5
        U R                   H(  nUR                  S5      (       a  M  [	        SU S35      e   U R
                   H'  n[        U[        5      (       a  M  [	        SU S35      e   U R                  (       a  [	        S5      eU R                  S-   U l
        U R                  /U l        U R                  S   U l        U
R                  S	S
5      U l        U
R                  SS 5      U l        g )Nz.javazJar source z is not a java file.zLink target z is not a jar target.z5structured sources are not supported in Java targets.z.jarr  r   r   r   )rz  r5  rs   r  r   r  r9  rA  r|  r   r  r  r  	java_argsr}  r   r   )r   r   r   r   rP  rs   r|  rr   r5   r  rV  r  r;  r  s                r^   r5  Jar.__init__<  s     	z]d$	9A::g&&&QC7K'LMM  ""Aa%%&aS8M'NOO # """#Z[[		F*0 **\26=CZZHXZ^=_r]   c                    U R                   $ r   )r   r   s    r^   get_main_classJar.get_main_classP  re  r]   c                    g)Nz@jarrU   r   s    r^   r  Jar.type_suffixS  r  r]   c                    U R                   $ r   )rD  r   s    r^   get_java_argsJar.get_java_argsV  r|  r]   c                    U R                   $ r   )r   r   s    r^   get_java_resourcesJar.get_java_resourcesY  r   r]   c                    g r   rU   r   s    r^   r  Jar.validate_install\  r  r]   c                    gr;  rU   r   s    r^   r^  Jar.is_linkable_target`  r=  r]   c                J   U R                    Vs/ s H?  n[        R                  R                  UR	                  5       UR                  5       5      PMA     nn[        R                  R                  U5      nU(       a!  S[        R                  R                  U5      /$ / $ s  snf )Nz-cp)r  r   r   r   r.  rV  pathsep)r   r
  cp_paths	cp_strings       r^   get_classpath_argsJar.get_classpath_argsc  sr    LPL]L]^L]qBGGLL1ABL]^JJOOH-	2::??8455		 _s   AB c                :    U R                   R                  5       S4$ )Nz{jardir})r5   get_jar_dirr   s    r^   r  Jar.get_default_install_dirj  s    ++-z99r]   )r  rD  r   r   r  )r   r   r   r   r   r   rP  r   rs   zT.List[SourceOutputs]r|  zT.Optional['StructuredSources']r5   r  r  rM  )r   rK  rh  )rW   rX   rY   rZ   known_jar_kwargsr  r  r5  rG  r  rL  rO  r  r^  rY  r  r\   rc  rd  s   @r^   rA  rA  7  sd    #LH`/`Ed`'>`Kb`(#: :r]   rA  c                      \ rS rSr% SrSrS\S'   S\S'   S\S	'   SS
 jr\SS j5       r	S r
SS jrSS jrSS jrSS jrS rSS jrS S jrS!S jrS!S jrS!S jrS!S jrS"S jrS#S jrSrg)$rE   im  zA special opaque object returned by indexing a CustomTarget. This object
exists in Meson, but acts as a proxy in the backends, making targets depend
on the CustomTarget it's derived from, but only adding one source file to
the sources.
r  zT.ClassVar[str]r  z$T.Union[CustomTarget, CompileTarget]r  r   r  c                :    U R                   R                  U l        g r   )r  rP  r   s    r^   r  CustomTargetIndex.__post_init__{  s    ;;22r]   c                N    U R                   R                   SU R                   S3$ )N[])r  r   r  r   s    r^   r   CustomTargetIndex.name~  s$    ++""#1T[[M33r]   c                N    SR                  U R                  U R                  5      $ )Nz<CustomTargetIndex: {!r}[{}]>)r  r  r  r   s    r^   r  CustomTargetIndex.__repr__  s    .55dkk4;;OOr]   c                    U R                   /$ r   r  r   s    r^   r  CustomTargetIndex.get_outputs  s    }r]   c                6    U R                   R                  5       $ r   )r  r.  r   s    r^   r.  CustomTargetIndex.get_subdir  s    {{%%''r]   c                    U R                   $ r   ri  r   s    r^   rV  CustomTargetIndex.get_filename  r  r]   c                6    U R                   R                  5       $ r   )r  r  r   s    r^   r  CustomTargetIndex.get_id  s    {{!!##r]   c                6    U R                   R                  5       $ r   )r  r  r   s    r^   r  #CustomTargetIndex.get_all_link_deps  s    {{,,..r]   c                8    U R                   R                  U5      $ r   )r  r  r  s     r^   r  'CustomTargetIndex.get_link_deps_mapping  s    {{0088r]   c                6    U R                   R                  5       $ r   )r  r!  r   s    r^   r!  &CustomTargetIndex.get_link_dep_subdirs  s    {{//11r]   c                L    U R                   R                  U R                  5      $ r   )r  r  r  r   s    r^   r^  $CustomTargetIndex.is_linkable_target  s    {{--dkk::r]   c                d    [         R                  R                  U R                  5      S   nUS;  $ )r  r  r  )r   r   r  r  r  s     r^   r  #CustomTargetIndex.links_dynamically  s,     ggt{{+B/.((r]   c                6    U R                   R                  5       $ r   )r  re  r   s    r^   re   CustomTargetIndex.should_install  s    {{))++r]   c                    [         R                  R                  U R                  5      S   nUS;   =(       a    U R	                  5       (       + $ )z8
Returns True if this is a not installed static library
r  r  )r   r   r  r  re  r  s     r^   rn  CustomTargetIndex.is_internal  s=     ggt{{+B/n$BT-@-@-B)BBr]   c                6    U R                   R                  5       $ r   )r  r
  r   s    r^   r
  %CustomTargetIndex.extract_all_objects  s    {{..00r]   c                6    U R                   R                  5       $ r   )r  r   r   s    r^   r   (CustomTargetIndex.get_custom_install_dir  s    {{1133r]   )rP  Nr  r  r  rP  rQ  r  r  ri  )rW   rX   rY   rZ   r  r  r[   r  r  r   r  r  r.  rV  r  r  r  r!  r^  r  re  rn  r
  r   r\   rU   r]   r^   rE   rE   m  s     !)Ho(00K3 4 4P($/92;),C14r]   rE   c                  d   ^  \ rS rSr S	S
U 4S jjjrSS jrSS jrSS jrSS jrSS jr	Sr
U =r$ )ConfigurationDatai  c           	        > [         TU ]  5         U(       a?  UR                  5        VVs0 s H!  u  p#U[        U[        5      (       a  UOUS 4_M#     snnO0 U l        SU l        g s  snnf r]  )rz  r5  r8  r9  r  r  used)r   initial_valuesrI  rJ  r  s       r^   r5  ConfigurationData.__init__  s_     	`n^EYEYE[\E[TQQZ5))4y8E[\tv 		 ]s   (A%c                ,    [        U R                  5      $ r   )r  r  r   s    r^   r  ConfigurationData.__repr__      DKK  r]   c                    XR                   ;   $ r   r  )r   r  s     r^   __contains__ConfigurationData.__contains__  s    ##r]   c                ,    [        U R                  5      $ r   )rO   r  r   s    r^   r  ConfigurationData.__bool__  r  r]   c                     U R                   U   $ r   r  rN  s     r^   r}  ConfigurationData.get  s    {{4  r]   c                6    U R                   R                  5       $ r   )r  r  r   s    r^   r  ConfigurationData.keys  s    {{!!r]   )r  r  r   )r  zyT.Optional[T.Union[T.Dict[str, T.Tuple[T.Union[str, int, bool], T.Optional[str]]], T.Dict[str, T.Union[str, int, bool]]]]r  )r  r   r   rO   r  )r   r   r   z1T.Tuple[T.Union[str, int, bool], T.Optional[str]])r   zT.Iterator[str])rW   rX   rY   rZ   r5  r  r  r  r}  r  r\   rc  rd  s   @r^   r  r    s0        !$!!" "r]   r  c                  6    \ rS rSrSS jrSS jrS	S
S jjrSrg)OverrideExecutablei  c                    Xl         X l        g r   _executable_version)r   r  r   s      r^   r5  OverrideExecutable.__init__  s    %r]   c                D    [         R                  U S5      n[        X!5      $ )Nr  )rg  __getattribute__r   )r   r   r  s      r^   __getattr__OverrideExecutable.__getattr__  s    --dMB{))r]   Nc                    U R                   $ r   )r  )r   interpreters     r^   get_versionOverrideExecutable.get_version  rt  r]   r  )r  r:  r   r   )r   r   r   zT.Anyr   )r  zT.Optional[Interpreter]r   r   )rW   rX   rY   rZ   r5  r  r  r\   rU   r]   r^   r  r    s     * r]   r  c                      \ rS rSr% S\S'   S\S'   S\S'   S\S'   S\S	'   S
rS\S'   S
rS\S'   S
rS\S'   S
rS\S'   SS jr	Sr
g
)Datai  r   rs   r   ry   r   r   r}   r   Nr   renamer   rz   	data_typer   r   c                    U R                   cJ  U R                   Vs/ s H,  n[        R                  R	                  UR
                  5      PM.     snU l         g g s  snf r   )r  rs   r   r   r  r  )r   r  s     r^   r  Data.__post_init__  sA    ;;>BllKl277++AGG4lKDK Ks   3A)r  r  )rW   rX   rY   rZ   r[   r  rz   r  r   r  r\   rU   r]   r^   r  r    sN    OFK#'K'Is(,O%,Lr]   r  c                  V    \ rS rSr% S\S'   S\S'   S\S'   S\S'   SrS\S	'   SS
 jrSrg)SymlinkDatai  r   r  r   ry   r   Nr   rz   c                    U R                   [        R                  R                  U R                   5      :w  a  [	        SU R                    S35      eg )NzLink name is "zX", but link names cannot contain path separators. The dir part should be in install_dir.)r   r   r   r  r   r   s    r^   r  SymlinkData.__post_init__  sK    99((33"^DII; ?L $L M M 4r]   rU   r  )rW   rX   rY   rZ   r[   rz   r  r\   rU   r]   r^   r  r    s'    K
IO#'K'Mr]   r  c                  H    \ rS rSr% S\S'   S\S'   S\S'   S\S	'   S\S
'   Srg)	TestSetupi  r   exe_wrapperrO   gdbr  timeout_multiplierr#   r  exclude_suitesrU   NrV   rU   r]   r^   r  r    s    	I	r]   r  c                   / nU  H  n[        U[        5      (       a  UR                  U5        M+  [        U[        [        [
        [        45      (       a  X#R                  5       -  nMd  [        U[        5      (       a  X!R                  U5      -  nM  [        U[        5      (       a  UR                  UR                  5        M  [        SU< 35      e   U$ )zk
For the specified list of @sources which can be strings, Files, or targets,
get all the output basenames.
zUnknown source type: )r9  r   r   rI   rD   rE   rF   r  rJ   determine_ext_objsr   r  r  )rs   r  namesr  s       r^   r  r    s    
 EaLLOK7H-XYY]]_$E+,,//22E4  LL! #8!>??  Lr]   c                    [         R                  R                  U SS5      n [        US[        5      n[
        R                  " U 5      UR                  l        U$ ! [         a    [        SU< S35      ef = f)Nzmeson-privatez	build.datz
Build datazNo such build data file as r   )
r   r   r   r$   r  r   loadr5   FileNotFoundErrorr   )r  r  bs      r^   r  r    sl    ww||IDHJ,6!)y!9 J:8,aHIIJs   7A A6c                   U R                   R                  nS U R                   l         [        US5       n[        R                  " X5        S S S 5        X R                   l        g ! , (       d  f       N= f! X R                   l        f = f)Nwb)r5   r   openpickledump)objr  cdatar  s       r^   saver  !  sa    OO$$E#COO)(D!QKK " $)  "! $) s"   A6 A%A6 %
A3/A6 6B)rz   r  r   r  r   zT.List[T.Optional[str]]r  )r  r   r   r  )r  r  r  r   r   r   )
__future__r   collectionsr   r   r   dataclassesr   r   	functoolsr	   rm  rF  r9  r  r   r   r  r`  r   typingrN  r   r   r   r   r   mesonlibr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   optionsr&   r  r'   r(   r)   r*   r+   r,   r-   r.   r/   interpreterbaser0   r1   r2   TYPE_CHECKINGtyping_extensionsr3   r4   r5   _typingr6   backend.backendsr7   r8   interpreter.interpreterr9   r:   interpreter.interpreterobjectsr;   r<   r=   linkers.linkersr>   r?   r@   rA   r4  rB   mparserrC   UnionrK   r\  rY  r   ObjectTypesrM   
pch_kwargslang_arg_kwargsvala_kwargsrust_kwargs	cs_kwargsswift_kwargsbuildtarget_kwargsr^  r  r  r  rM  r^  r   r   r   r   r   r   r   r   r   r  r  rJ   r  ABCMetar  rI   rf  rn  r  rF   r:  rH   rG   r  r  r  r  rD   r  r$  r:  rA  rE   r  r  r  r  r  r  r  r  )r  s   0r^   <module>r     s5   # 7 7 (  
    	  	               I H??4.)#C=+-II$!WWQRNww\]HwwQR''#v'9;KKLK,I , y!
.;<mdV5>m<    7 "78)$	-/BC :   	
    -/xx .1zz .2BJ1OO .1OO #|5E&FF 	&)	.E	 4 	~ 	 e  
 e(n ( (6 e.  " e(~ ( ( e- - - e
 
 
,H: H:T e$. $ $L e/T~ /T /Td e5!- - "-` eW^s{{ W Wrb& bJ'	 	 .L L^ eDN D DN^ ^BxK xtQK QjN= NB2% 26% %N 4M!6+[ M!^9K 9v1 1f
G) 
G4:+ 4:l eG4(. G4 G4R" "2
 
 eL> L L e
M. 
M 
M e     &J)}f =s   +P