o
    Wodf5                     @  s  d dl mZ d dlmZ d dlZd dlZd dlZd dlZddl	m
Z
mZmZmZ ddl	mZmZ ddlmZ dd	lmZ dd
lmZmZ ddl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) ej*rd dl+m,Z, ddl	m-Z- ddl.m/Z/ ddlm0Z0m1Z1 ddl2m3Z3 ddlm4Z4 G dd de,Z5G dd de,Z6G dd deZ7G dd de
Z8d"d d!Z9dS )#    )annotations)PathN   )ExtensionModuleModuleReturnValueNewExtensionModule
ModuleInfo   )mlogbuild)CFLAGS_MAPPING)ENV_VAR_PROG_MAP)InternalDependencyPkgConfigDependency)
FeatureNew)ENV_KW
DEPENDS_KW)ContainerTypeInfo	KwargInfotyped_kwargstyped_pos_args)EnvironmentExceptionMesonException
Popen_safeMachineChoiceget_variable_regexdo_replacement	join_args	OptionKey)	TypedDict)ModuleState)ImmutableListProtocol)BuildTargetCustomTarget)Interpreter)TYPE_varc                   @  s   e Zd ZU ded< dS )
DependencystrsubdirN__name__
__module____qualname____annotations__ r.   r.   home/ych/rk3568/buildroot/output/rockchip_rk3568_recovery/host/lib/python3.10/site-packages/mesonbuild/modules/external_project.pyr&   *   s   
 r&   c                   @  s6   e Zd ZU ded< ded< ded< ded< ded	< d
S )
AddProjectT.List[str]configure_optionscross_configure_optionsboolverbosebuild.EnvironmentVariablesenvz*T.List[T.Union[BuildTarget, CustomTarget]]dependsNr)   r.   r.   r.   r/   r0   .   s   
 r0   c                      s   e Zd ZU ded< d4 fddZd5ddZd6ddZd7ddZd8ddZd9d$d%Z	d:d'd(Z
ed)eed)ed*ed+d,d;d2d3Z  ZS )<ExternalProjectzImmutableListProtocol[str]makestate'ModuleState'configure_commandr'   r2   r1   r3   r7   r6   r5   r4   extra_depends.T.List[T.Union['BuildTarget', 'CustomTarget']]c                   s  t    | jd| ji t|j| _|j| _|j| _|j	| _
|j| _|j| _|| _|| _|| _|| _|| _t| j
 | j| _t| j
 | jd| _t| j
 | jd| _| j
jtd}t|tsiJ dt|| _| j
jtd}	t|	tsJ dt|	| _| j
jtd}
t|
tsJ dt|
| _| jj| _| jj r| j!| jj | _| j!| jj"| _#| $| | %|| _&d S )NZ
dependencyr   distprefixfor mypylibdir
includedir)'super__init__methodsupdatedependency_methodr   r(   project_version
subprojectenvironmentr7   build_machinehost_machiner=   r2   r3   r5   user_envZget_source_dirsrc_dirZget_build_dir	build_dirinstall_dircoredataZ
get_optionr   
isinstancer'   rA   rC   rD   namedriverelative_toroot
rel_prefix
_configure_create_targetstargets)selfr;   r=   r2   r3   r7   r5   r>   Z_p_lZ_i	__class__r.   r/   rF   ;   s>   





zExternalProject.__init__returnNonec                   sZ  | j dkr/tdd| j|j |d}| }|ddt| jg7 }| j	}| dg | _
nt| j	| j }|| }| }| j}|d | _
dd	| j fd
d| j fdd | j fg}| || || | j|7 }| j rd| jj| jj| jj}dd |fg}|| | j|7 }g }	g }
tj | _| jjj t!j" # D ]T\ }t$ fddt%t&fD rq| jj't!j" }t(|t)sJ d| *|+ | jt%  < | *|| jt&  < |	s|, }	| jj-t!j" }t(|t)sJ d|}
q|	r	 | *|
| jd< | j./| j| _t0j1| j| jt!j"dd| _| jj2ddd | 3d|| d S )NwafzWaf external projectz0.60.0	configurez-or   r:   PREFIXz--prefix=@PREFIX@LIBDIRz--libdir=@PREFIX@/@LIBDIR@
INCLUDEDIRz{}-{}-{}HOSTc                 3  s    | ]} |vV  qd S Nr.   .0ilangr.   r/   	<genexpr>       z-ExternalProject._configure.<locals>.<genexpr>rB   LDFLAGST)Zuninstalled)parentsexist_ok)4r=   r   userK   current_nodeZfind_programZget_commandr'   rQ   rP   r:   r   as_posixrA   rC   rD   _validate_configure_options_format_optionsr2   r7   Zis_cross_buildformatrN   Z
cpu_familyrM   systemr3   osenvironcopyrun_envrS   	compilersr   rh   itemsanyr   r   Zget_external_argsrT   list_quote_and_joinZget_exelistZget_linker_exelistZget_external_link_argsrO   Zget_envr   Z	setup_envmkdir_run)r]   r;   rc   Zconfigure_cmdworkdirZconfigure_pathZconfigure_progdhostZlink_exelist	link_argscompilerZcargsr^   r.   rm   r/   rZ   n   sd   



zExternalProject._configurearrayc                 C  s   d dd |D S )N c                 S  s   g | ]}t |qS r.   )shlexquoterj   r.   r.   r/   
<listcomp>   s    z3ExternalProject._quote_and_join.<locals>.<listcomp>)join)r]   r   r.   r.   r/   r      s   zExternalProject._quote_and_join	variablesT.List[T.Tuple[str, str, str]]c                 C  sd   |D ]-\}}}|d u rqd| d}| j D ]}||v r nqtdd| j|j | j | qd S )N@zDefault configure_optionz0.57.0)r2   r   rt   rK   ru   append)r]   r   r;   keydefaultvalZ
key_formatoptionr.   r.   r/   rw      s   
z+ExternalProject._validate_configure_optionsoptionsc                 C  s   g }t  }td}dd |D }|D ]}t||d|\}}	||	 || q|r>ddd t|D }
td|
 d|S )	NZmesonc                 S  s   i | ]
\}}}||d fqS ri   r.   )rk   k_vr.   r.   r/   
<dictcomp>   s    z3ExternalProject._format_options.<locals>.<dictcomp>z, c                 s  s    | ]}t |V  qd S ri   )repr)rk   mr.   r.   r/   ro      rp   z2ExternalProject._format_options.<locals>.<genexpr>z
Variables z" in configure options are missing.)setr   r   rH   r   r   sortedr   )r]   r   r   outmissingZregexZconfdataoargZmissing_varsZvar_listr.   r.   r/   rx      s   

zExternalProject._format_optionsstepcommandr   r   c           	      C  s   t d| j dt | dt| d t| d }tt j| j d| d}d }| jsAt|dd	d
}|	|d  |
  nt | t||| jtj|d^}}|jdkrp| d|j d}| jsl|dt| 7 }t|d S )NzExternal project :zRunning command z in directory 
-z.logwzutf-8)encoding)cwdr7   stderrstdoutr   z step returned error code .z
See logs: )r
   logrU   Zboldr'   r   log_dirr5   openwriteflushr   r~   
subprocessSTDOUT
returncoder   )	r]   r   r   r   r   Zlog_filenameoutputpr   r.   r.   r/   r      s&   




zExternalProject._runT.List['TYPE_var']c                 C  s   | j  }|ddd| jd| j d| j d| j dtjdt	| j
g7 }| jr-|d	 tj| j| j | j| j |d
dg g | j dg| j dd|d
| _tj| j td| j ddd d dd| jd	}| j|gS )Nz
--internalZexternalprojectz--namez--srcdirz
--builddirz--installdirz--logdirz--makez	--verbosez@OUTPUT@z	@DEPFILE@z.stampz.dT)ZdepfileZconsoler>   r@   r   F)rR   Zinstall_dir_nameZinstall_modeexcludeZstrip_directoryZfrom_source_dirrK   )r7   Zget_build_commandrU   rP   rv   rQ   rR   r
   r   r   r:   r5   r   r   r#   r(   rK   targetZ
InstallDirr   rY   )r]   r>   cmdZidirr.   r.   r/   r[      sD   









zExternalProject._create_targetszexternal_project.dependencyr(    r   argsT.Tuple[str]kwargs'Dependency'r   c                 C  s   |d }t | j| j| j}|d rt ||d }t | j| j| j}| j}d| g}d| d| g}	| j}
t|g ||	g g |
gg i g g g }|S )Nr   r(   z-Iz-Lz-l)r   rR   rY   rD   rC   rJ   r   r   )r]   r;   r   r   libnameZabs_includedirZ
abs_libdirversionZcompile_argsr   sourcesdepr.   r.   r/   rI     s   z!ExternalProject.dependency_method)r;   r<   r=   r'   r2   r1   r3   r1   r7   r6   r5   r4   r>   r?   )r;   r<   ra   rb   )r   r1   ra   r'   )r   r   r;   r<   ra   rb   )r   r1   r   r   ra   r1   )r   r'   r   r1   r   r   ra   rb   )r>   r?   ra   r   )r;   r<   r   r   r   r   ra   r   )r*   r+   r,   r-   rF   rZ   r   rw   rx   r   r[   r   r'   r   r   rI   __classcell__r.   r.   r_   r/   r9   7   s   
 
3
>



&r9   c                
      s   e Zd ZeddddZd fddZed	eed
e	de
eeg dde	de
eedgdde	deddeejdddddZ  ZS ) ExternalProjectModulezExternal build systemz0.56.0T)Zunstableinterpreter'Interpreter'c                   s"   t  | | jd| ji d S )Nadd_project)rE   rF   rG   rH   r   )r]   r   r_   r.   r/   rF     s   zExternalProjectModule.__init__z external_project_mod.add_projectzexternal_project.add_projectr2   )r   Zlistifyr3   z--host=@HOST@r5   Fr   z0.63.0)Zsincer;   r<   r   r   r   'AddProject'ra   r   c              	   C  s<   |d }t |||d |d |d |d |d }t||jS )Nr   r2   r3   r7   r5   r8   )r9   r   r\   )r]   r;   r   r   r=   projectr.   r.   r/   r   "  s   
z!ExternalProjectModule.add_project)r   r   )r;   r<   r   r   r   r   ra   r   )r*   r+   r,   r   INFOrF   r   r'   r   r   r   r   r4   r   r   Zevolver   r   r.   r.   r_   r/   r     s    
r   interpr   ra   c                 C  s   t | S ri   )r   )r   r.   r.   r/   
initialize7  s   r   )r   r   ra   r   ):
__future__r   pathlibr   r{   r   r   typingTr   r   r   r   r   r
   r   Zcompilers.compilersr   Z	envconfigr   dependenciesr   r   Zinterpreterbaser   Zinterpreter.type_checkingr   r   Zinterpreterbase.decoratorsr   r   r   r   Zmesonlibr   r   r   r   r   r   r   r   TYPE_CHECKINGtyping_extensionsr   r    Z_typingr!   r"   r#   r   r$   r%   r&   r0   r9   r   r   r.   r.   r.   r/   <module>   s8   (	 c