
    eY                       d dl mZ d dlZd dlZddlmZ ddlmZ ddlmZ ddlm	Z	m
Z
 ddlmZmZ dd	lmZmZ dd
lmZmZmZmZ ddlmZmZmZmZmZmZmZmZmZmZ ddl m!Z! ddl"m#Z#m$Z$ ejJ                  rNd dl&m'Z'm(Z( ddl)m*Z* ddlm+Z+m,Z, ddlm-Z- ddl.m/Z/  G d de(      Z0 G d de(      Z1 G d de(      Z2 G d de(      Z3 G d de      Z4y)    )annotationsN   )mesonlib)dependencies)build)mlogcoredata)MachineChoice	OptionKey)OverrideProgramExternalProgram)ENV_KWENV_METHOD_KWENV_SEPARATOR_KWenv_convertor_with_method)
MesonInterpreterObject
FeatureNewFeatureDeprecatedtyped_pos_argsnoArgsFlattening	noPosargsnoKwargstyped_kwargs	KwargInfoInterpreterException   )MesonVersionString)	NATIVE_KWNoneType)Literal	TypedDict)Compiler)TYPE_kwargsTYPE_var)ExecutableSerialisation)Interpreterc                  "    e Zd ZU ded<   ded<   y)FuncOverrideDependencymesonlib.MachineChoicenativeT.Optional[bool]staticN__name__
__module____qualname____annotations__     B/usr/lib/python3/dist-packages/mesonbuild/interpreter/mesonmain.pyr(   r(      s    &&  r3   r(   c                  ,    e Zd ZU ded<   ded<   ded<   y)AddInstallScriptKWboolskip_if_destdirstrinstall_tagdry_runNr-   r2   r3   r4   r6   r6   $   s    r3   r6   c                      e Zd ZU ded<   y)NativeKWr)   r*   Nr-   r2   r3   r4   r=   r=   *   s    &&r3   r=   c                  "    e Zd ZU ded<   ded<   y)AddDevenvKWz#Literal['set', 'prepend', 'append']methodr9   	separatorNr-   r2   r3   r4   r?   r?   .   s    33r3   r?   c                      e Zd ZdU fdZ	 	 	 	 	 	 	 	 dVdZ	 	 	 	 	 	 dWdZ edeej                  e
j                  efeej                  e
j                  e
j                  e
j                  ef       ed ededd	       ed
eefd       ededd	            	 	 	 	 	 	 dXd              Z edeej                  efeej                  ef      e	 	 	 	 	 	 dYd              Z edeej                  efeej                  ef      e edd      	 	 	 	 	 	 dYd                     ZeedZd              ZeedZd              ZeedZd              Zee eddd      dZd                     Zee eddd      dZd                     Zee edd      dZd                      Z ee ed!d      dZd"                     Z!ee ed#d$      dZd%                     Z"ee ed&d$      dZd'                     Z#ee ed(d)d*      d[d+                     Z$ee ed,d)      d[d-                     Z%d\d.Z&eed[d/              Z' ed0e       ed0e(      d]d1              Z)eed[d2              Z*eed[d3              Z+ ed4e      ed^d5              Z, ed6d7       ed6eej                  ee
j                  f      ed_d8                     Z- ed9e( ed:eefd             ed9ee.j^                         ed9d;      d`d<                     Z0	 da	 	 	 	 	 dbd=Z1eedZd>              Z2 ed?d@      eedcdA                     Z3 edBd      eedddC                     Z4eededD              Z5eedZdE              Z6dfdFZ7e8 edGd$dH       edGee9gI      edgdJ                            Z:e8 edKd;       edKee9gI       edKe(      dhdL                            Z; edMd$       edMe       edMe(      didN                     Z< edOd$       edPe= e>j~                  dQ             edOee@eAej                  f      	 	 	 	 djdR                     ZCee edSd      dZdT                     ZD xZES )k	MesonMainc                   t         |   |j                         || _        || _        | j
                  j                  i d| j                  d| j                  d| j                  d| j                  d| j                  d| j                  d| j                  d	| j                  d
| j                  d| j                   d| j"                  d| j$                  d| j&                  d| j(                  d| j*                  d| j,                  d| j.                  | j0                  | j2                  | j4                  | j6                  | j8                  | j:                  | j<                  | j>                  | j@                  | jB                  | jD                  | jF                  | jH                  | jJ                  d       y )N
subproject
add_devenvadd_dist_scriptadd_install_scriptadd_postconf_scriptbackendbuild_options
build_rootcan_run_host_binariescurrent_source_dircurrent_build_dirget_compilerget_cross_propertyget_external_propertyglobal_build_rootglobal_source_roothas_exe_wrapperhas_external_property)install_dependency_manifestis_cross_buildis_subprojectis_unityoverride_dependencyoverride_find_programproject_build_rootproject_licenseproject_license_filesproject_nameproject_source_rootproject_versionsource_rootversion)&super__init__rF   r   interpretermethodsupdateadd_devenv_methodadd_dist_script_methodadd_install_script_methodadd_postconf_script_methodbackend_methodbuild_options_methodbuild_root_methodcan_run_host_binaries_methodcurrent_source_dir_methodcurrent_build_dir_methodget_compiler_methodget_cross_property_methodget_external_property_methodglobal_build_root_methodglobal_source_root_methodhas_exe_wrapper_methodhas_external_property_method"install_dependency_manifest_methodis_cross_build_methodis_subproject_methodis_unity_methodoverride_dependency_methodoverride_find_program_methodproject_build_root_methodproject_license_methodproject_license_files_methodproject_name_methodproject_source_root_methodproject_version_methodsource_root_methodversion_method)selfr   rh   	__class__s      r4   rg   zMesonMain.__init__4   s   K$:$:;
& \4+A+A .0K0K143Q3Q 3D4S4S '(;(;	
 -d.G.G *4+A+A 5d6W6W 243Q3Q 1$2O2O ,T-E-E 243Q3Q 5d6W6W 1$2O2O 243Q3Q /0K0K  5d6W6W!" =A<c<c/3/I/I.2.G.G)-)=)=484S4S6:6W6W373Q3Q040K0K6:6W6W-1-E-E484S4S040K0K,0,C,C(,(;(;= 	 r3   c                b   g }t        |t        j                  t        f      rBt	        j
                  d| d| j                  | j                         |j                  |       nwt        |t        j                        r0t	        j
                  d| d| j                  | j                         | j                  j                  |g      }|j                  |       |j                  |       | j                  j                  j                  |d      }| j                  j                  |_        |S )Nz?Passing executable/found program object to script parameter of 0.55.0locationz+Passing file object to script parameter of 0.57.0T)verbose)
isinstancer   
Executabler   r   
single_userF   current_nodeappendr   Filerh   find_program_implextendrK   get_executable_serialisation)r   nameprogargslargsfoundess          r4   _find_source_scriptzMesonMain._find_source_scriptY   s     JLdU--?@!!$cdhci"j"*DOOdFWFWYLL$.%%(STXSY&Z&.$J[J[]$$66v>ELLT%%BB5RVBW((33	r3   c           
     l   g }d}|D ]g  }t        |t              r|j                  |       &t        |t        j                        rAd}|j                  |j                  | j                  j                  j                               t        |t        j                  t        j                  t        j                  f      rd}|j                  |j                         D cg c]0  }t        j                   j#                  |j%                         |      2 c}       t        |t        j                        rd|j&                  _        Bd|_        K|j                  |j*                         d}j |r;t-        j.                  d| dd| j                  j0                  | j2                         |S c c}w )NFTz	Calling "zP" with File, CustomTarget, Index of CustomTarget, Executable, or ExternalProgramr   r   )r   r9   r   r   r   rel_to_builddirrh   environment
source_dirr   BuildTargetCustomTargetCustomTargetIndexr   get_outputsospathjoin
get_subdirtargetbuild_by_defaultcommandr   r   rF   r   )r   r   r   script_argsnewaos          r4   _process_script_argszMesonMain._process_script_argsn   sX     	A!S!""1%Ax}}-""1#4#4T5E5E5Q5Q5\5\#]^A 1 153E3EuG^G^_`""Q]]_#]BGGLL$C#]^ a!8!8904AHH-)-A&""199-)	, !!D6 "1 1$**55@Q@QS ' $^s    5F1
zmeson.add_install_script)varargsr8   Fr   )defaultsincer:   z0.60.0)r   r;   z1.1.0c                    | j                  d|d         }| j                  d|d   |      }|d   |_        |d   |_        |d   |_        | j
                  j                  j                  |       y )NrI   r   r   r8   r:   r;   )r   r   r8   tagr;   r   install_scriptsr   r   r   kwargsr   scripts        r4   rm   z#MesonMain.add_install_script_method   sr      //0Dd1gN))*>QU!'(9!:M*
	*

""))&1r3   zmeson.add_postconf_scriptc                    | j                  d|d         }| j                  d|d   |      }| j                  j                  j	                  |       y )NrJ   r   r   )r   r   r   postconf_scriptsr   r   s        r4   rn   z$MesonMain.add_postconf_script_method   sL     //0EtAwO))*?a+V

##**62r3   zmeson.add_dist_scriptz0.48.0c                   |d   r7t        j                  dd| j                  j                  | j                         | j                  j                  dk7  r7t        j                  dd| j                  j                  | j                         | j                  d|d         }| j                  d|d	   |      }| j                  j                  j                  |       y )
Nr   z1Calling "add_dist_script" with multiple argumentsz0.49.0r    z)Calling "add_dist_script" in a subproject0.58.0rH   r   )
r   r   rh   rF   r   r   r   r   dist_scriptsr   r   s        r4   rl   z MesonMain.add_dist_script_method   s     7!!"U"*D,<,<,G,GRVRcRce&&",!!"M"*D,<,<,G,GRVRcRce//0A47K))*;T!WkR

&&v.r3   c                    | j                   j                  j                  }| j                   j                  }|dk(  r|S t        j
                  j                  ||      S Nr   )rh   r   r   subdirr   r   r   r   r   r   srcsubs        r4   rs   z#MesonMain.current_source_dir_method   sM     **55%%"9Jww||C%%r3   c                    | j                   j                  j                  }| j                   j                  }|dk(  r|S t        j
                  j                  ||      S r   )rh   r   	build_dirr   r   r   r   r   s        r4   rt   z"MesonMain.current_build_dir_method   sM     **44%%"9Jww||C%%r3   c                B    | j                   j                  j                  S N)rh   rK   r   r   r   r   s      r4   ro   zMesonMain.backend_method   s     '',,,r3   zmeson.source_rootz0.56.0zFuse meson.project_source_root() or meson.global_source_root() instead.c                B    | j                   j                  j                  S r   rh   r   r   r   s      r4   r   zMesonMain.source_root_method        ++666r3   zmeson.build_rootzDuse meson.project_build_root() or meson.global_build_root() instead.c                B    | j                   j                  j                  S r   rh   r   r   r   s      r4   rq   zMesonMain.build_root_method        ++555r3   zmeson.project_source_rootc                    | j                   j                  j                  }| j                   j                  }|dk(  r|S t        j
                  j                  ||      S r   )rh   r   r   root_subdirr   r   r   r   s        r4   r   z$MesonMain.project_source_root_method   sM     **55**"9Jww||C%%r3   zmeson.project_build_rootc                    | j                   j                  j                  }| j                   j                  }|dk(  r|S t        j
                  j                  ||      S r   )rh   r   r   r   r   r   r   r   s        r4   r   z#MesonMain.project_build_root_method   sM     **44**"9Jww||C%%r3   zmeson.global_source_rootr   c                B    | j                   j                  j                  S r   r   r   s      r4   ry   z#MesonMain.global_source_root_method  r   r3   zmeson.global_build_rootc                B    | j                   j                  j                  S r   r   r   s      r4   rx   z"MesonMain.global_build_root_method  r   r3   zmeson.has_exe_wrapperr   z(use meson.can_run_host_binaries instead.c                "    | j                         S r   _can_run_host_binaries_implr   s      r4   rz   z MesonMain.has_exe_wrapper_method       //11r3   zmeson.can_run_host_binariesc                "    | j                         S r   r   r   s      r4   rr   z&MesonMain.can_run_host_binaries_method  r   r3   c                    | j                   j                  j                         xrH | j                   j                  j                         xr" | j                   j                  j                  d u  S r   )r   r   rY   need_exe_wrapperexe_wrapper)r   s    r4   r   z%MesonMain._can_run_host_binaries_impl  sZ    JJ""113 7JJ""3357JJ""..$6
 	
r3   c                J    | j                   j                  j                         S r   )r   r   rY   r   s      r4   r}   zMesonMain.is_cross_build_method%  s     zz%%4466r3   zmeson.get_compilerc                    |d   }|d   }| j                   j                  j                  |   }	 ||   S # t        $ r! t	        d| d|j                          d      w xY w)Nr   r*   z'Tried to access compiler for language "z", not specified for z	 machine.)rh   r	   	compilersKeyErrorr   get_lower_case_name)r   r   r   cnamefor_machineclists         r4   ru   zMesonMain.get_compiler_method*  s     QX&  ))33K@	[< 	[&)PQVPWWlmx  nM  nM  nO  mP  PY  (Z  [  [	[s	   4 *Ac                    | j                   j                  j                  j                  t	        d            }|dk(  xs! |dk(  xr | j                   j                         S )Nunityonsubprojects)rh   r   r	   
get_optionr   rZ   )r   r   r   optvals       r4   r   zMesonMain.is_unity_method5  sS     !!--66AA)GBTU~_&M"9"^d>N>N>\>\>^_r3   c                6    | j                   j                         S r   )rh   rZ   r   s      r4   r~   zMesonMain.is_subproject_method;  s     --//r3   z!meson.install_dependency_manifestc                ,    |d   | j                   _        y )Nr   )r   dep_manifest_namer   s      r4   r|   z,MesonMain.install_dependency_manifest_method@  s     (,Aw

$r3   zmeson.override_find_programz0.46.0c                   |\  }}t        |t        j                        r|j                  | j                  j
                  j                  | j                  j
                  j                        }t        j                  j                  |      st        d| d      t        ||g      }| j                  j                  ||       y )NzTried to override z! with a file that does not exist.)r   r   r   absolute_pathrh   r   r   r   r   r   existsr   r   add_find_program_override)r   r   r   r   exeabspaths         r4   r   z&MesonMain.override_find_program_methodE  s     	cc8==)''(8(8(D(D(O(O(,(8(8(D(D(N(NPG77>>'**-?vEf+ghh!$	2C224=r3   zmeson.override_dependencyr,   z0.54.0c                2   |\  }}|st        d      t        d| j                  j                        }| j                  j                  j                  |      }t        |t              sJ d       |d   }|v| j                  |||d        |dk(  r| j                  |||d       y |dk(  r| j                  |||d	       y | j                  |||d       | j                  |||d	       y | j                  |||d d
       | j                  ||||       y )Nz3First argument must be a string and cannot be emptydefault_libraryrE   zfor mypyr,   )r,   TsharedF)r,   
permissive)	r   r   rh   rF   r	   r   r   r9   _override_dependency_impl)r   r   r   r   depoptkeyr   r,   s           r4   r   z$MesonMain.override_dependency_methodR  s-    	c&'\]],9I9I9T9TU**33>>vF/3/;;/!> **4fT*J(*..tS&.N H,..tS&.O..tS&.N..tS&.O **4fTVZ*[**4fV*Lr3   c                0   t        j                  d|j                               }||d= n||d<   t        j                  ||      }|d   }| j
                  j                  |   j                  |      }	|	r^|ry d}
t        j                  |	j                  j                  |	j                  j                        }t        |
j                  ||            t        j                  || j                   j"                        | j
                  j                  |   |<   y )NzT.Dict[str, T.Any]r,   r*   zUTried to override dependency {!r} which has already been resolved or overridden at {})Tcastcopyr   get_dep_identifierr   dependency_overridesgetr   get_error_location_stringnodefilenamelinenor   formatDependencyOverriderh   r   )r   r   r   r   r,   r   nkwargs
identifierr   overridemr   s               r4   r   z#MesonMain._override_dependency_imply  s     &&-v{{}=>! &GH!44T7C
X&::22;?CCJOgA55hmm6L6LhmmNbNbcH&qxxh'?@@$$S$*:*:*G*GH 	

''4Z@r3   c                p    | j                   j                  | j                  j                     j                  S r   )r   dep_manifestrh   active_projectnamere   r   s      r4   r   z MesonMain.project_version_method  s+     zz&&t'7'7'J'JKSSSr3   zmeson.project_license()z0.45.0c                p    | j                   j                  | j                  j                     j                  S r   )r   r  rh   r  licenser   s      r4   r   z MesonMain.project_license_method  s+     zz&&t'7'7'J'JKSSSr3   zmeson.project_license_files()c                    | j                   j                  | j                  j                     j                  D cg c]  }|d   	 c}S c c}w )Nr   )r   r  rh   r  license_files)r   r   r   ls       r4   r   z&MesonMain.project_license_files_method  s=     #jj55d6F6F6Y6YZhhi!iiis   A	c                T    t        | j                  j                  j                        S r   )r   rh   r	   re   r   s      r4   r   zMesonMain.version_method  s!     "$"2"2";";"C"CDDr3   c                .    | j                   j                  S r   )rh   r  r   s      r4   r   zMesonMain.project_name_method  s     222r3   c                    	 | j                   j                  j                  |   |   S # t        $ r& ||cY S t	        d|j                          d|       w xY w)zGShared implementation for get_cross_property and get_external_property.zUnknown property for z
 machine: )rh   r   
propertiesr   r   r   )r   propnamefallbackmachines       r4   __get_external_property_implz&MesonMain.__get_external_property_impl  sl    	t##//::7CHMM 	t#&)>w?Z?Z?\>]]ghpgq'rss	ts   %( A Azmeson.get_cross_propertyz)Use meson.get_external_property() instead)optargsc                N    |\  }}| j                  ||t        j                        S r   )&_MesonMain__get_external_property_implr
   HOSTr   r   r   r  r  s        r4   rv   z#MesonMain.get_cross_property_method  s)    
 "(008]EWEWXXr3   zmeson.get_external_propertyc                8    |\  }}| j                  |||d         S )Nr*   )r$  r&  s        r4   rw   z&MesonMain.get_external_property_method  s(    
 "(008VHEUVVr3   zmeson.has_external_propertyc                \    |d   }|| j                   j                  j                  |d      v S )Nr   r*   )rh   r   r  )r   r   r   	prop_names       r4   r{   z&MesonMain.has_external_property_method  s4     G	D,,88CCF8DTUUUr3   rG   r   z0.62.0c                   |d   }t        j                  |      }|rt        j                  d|       t	        ||d   |d         }t        |t        j                        sJ | j                  j                  j                  |       y )Nr   z"add_devenv": r@   rA   )
r   	validatorr   InvalidArgumentsr   r   r   EnvironmentVariablesdevenvr   )r   r   r   envmsg	converteds         r4   rk   zMesonMain.add_devenv_method  s~    
 1gs#((>#)?@@-c6(3CVKEXY	)X%B%BCCC

  +r3   zmeson.build_optionsc                ^    | j                   j                  }|yt        j                  |      S r   )rh   user_defined_optionsr	   format_cmd_line_options)r   r   r   optionss       r4   rp   zMesonMain.build_options_method  s.     ""77?//88r3   )r   z'build.Build'rh   z'Interpreter')r   r9   r   z>T.Union[str, mesonlib.File, build.Executable, ExternalProgram]r   T.List[str]returnz'ExecutableSerialisation')r   r9   r   zxT.Sequence[T.Union[str, mesonlib.File, build.BuildTarget, build.CustomTarget, build.CustomTargetIndex, ExternalProgram]]r7  r6  )r   zT.Tuple[T.Union[str, mesonlib.File, build.Executable, ExternalProgram], T.List[T.Union[str, mesonlib.File, build.BuildTarget, build.CustomTarget, build.CustomTargetIndex, ExternalProgram]]]r   z'AddInstallScriptKW'r7  None)r   zkT.Tuple[T.Union[str, mesonlib.File, ExternalProgram], T.List[T.Union[str, mesonlib.File, ExternalProgram]]]r   'TYPE_kwargs'r7  r8  )r   T.List['TYPE_var']r   r9  r7  r9   )r   r:  r   r9  r7  r7   )r7  r7   )r   T.Tuple[str]r   
'NativeKW'r7  z
'Compiler')r   r;  r   r9  r7  r8  )r   zGT.Tuple[str, T.Union[mesonlib.File, ExternalProgram, build.Executable]]r   r9  r7  r8  )r   z%T.Tuple[str, dependencies.Dependency]r   'FuncOverrideDependency'r7  r8  )F)r   r9   r   zdependencies.Dependencyr   r=  r,   r+   r   r7   r7  r8  )r   r:  r   r9  r7  r6  )r   zT.List[TYPE_var]r   r#   r7  zT.List[mesonlib.File])r   r:  r   r9  r7  r   )r  r9   r  zT.Optional[object]r   r
   r7  object)r    T.Tuple[str, T.Optional[object]]r   r9  r7  r>  )r   r?  r   r<  r7  r>  )r   r;  r   r<  r7  r7   )r   z@T.Tuple[T.Union[str, list, dict, mesonlib.EnvironmentVariables]]r   z'AddDevenvKW'r7  r8  )Fr.   r/   r0   rg   r   r   r   r9   r   r   r   r   r   r   r   r   r   r   r7   r   rm   r   rn   r   rl   r   rs   rt   ro   r   r   rq   r   r   ry   rx   rz   rr   r   r}   r   ru   r   r~   r|   r   r   
Dependencyr   r   r   r   r   r   r   r$  r   r>  rv   rw   r{   r   r   evolvelistdictr-  rk   rp   __classcell__)r   s   @r4   rC   rC   3   s6   # J#a";*##$#
 #J "	hmmU--?hmmU%6%68J8JELcLcetu
 "#T5I-#xA)T5@	
2P
2 )	
2 .2	
2
2 #	hmm_-hmm_5
 3P3 "	3 '+	3 3 	hmm_-hmm_5
 '2/P/ "	/ '+	/ 3 / &  & &  & -  - *H6~7 @  7 )85{|6 }  6 +X6& 7  & *H5& 6  & *H57 6  7 )846 5  6 .:de2 f  2 -x82 9  2
 7  7 (#.&	2[ 3 /[ `  ` 0  0 7=/  >/ -x813Y^YiYi8jk>  l 9> #(T8,H=
 /l6M6MN+X6M 7 OMB PUI*:IHLIY]I* T  T )84T   5T /9j   :j E  E 3  3t 18=hi.fXFY  G j Y -x813I/;W < J 9 W -x8137/;V < 8 9V h'-0G0@0G0Gh0WXL3dH4Q4Q"RS,"/,48, T Y (, %w/9 0  9r3   rC   )5
__future__r   r   typingr  r   r   r   r   r   r	   r
   r   programsr   r   interpreter.type_checkingr   r   r   r   interpreterbaser   r   r   r   r   r   r   r   r   r   
primitivesr   type_checkingr   r   TYPE_CHECKINGtyping_extensionsr    r!   r   r"   r#   r$   r%   rh   r&   r(   r6   r=   r?   rC   r2   r3   r4   <module>rN     s    # 	      / 7 j jN N N + .??4$72(! !
Y '9 'i 
j9& j9r3   