o
    WªodËB  ã                   @  sž   d dl mZ ddlmZmZmZ ddlmZ ddlm	Z	m
Z
mZ 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ejrEdd
lmZ G dd„ deƒZd	S )é    )Úannotationsé   )ÚExternalDependencyÚDependencyExceptionÚDependencyTypeName)ÚPkgConfigDependencyé   )Ú
Popen_safeÚ	OptionKeyÚ	join_args)ÚExternalProgram)ÚmlogN)ÚEnvironmentc                      sN   e Zd ZdZd‡ fdd	„Zddd„Zd d!dd„Zd d!dd„Zd"dd„Z‡  Z	S )#ÚDubDependencyNÚnameÚstrÚenvironmentú'Environment'ÚkwargsúT.Dict[str, T.Any]c                   s  t ƒ jtdƒ||dd |ˆ_ddlm}m} t ƒ  ¡ }t||ƒs#J ‚|ˆ_	d|v r0| 
d¡ˆ_tjd u r?ˆ ¡ ˆ_ˆjt_ntjˆ_ˆjsRˆjrMtdƒ‚dˆ_d S tˆjtƒsZJ ‚t d	 |ˆj ¡ ¡¡ |‰d
|v r|d
 }t|tƒrzd |¡}|› d|› ‰ˆj	j‰t|j tdƒ¡ƒ‰ˆdkr–d‰nˆdkrœd‰dˆdˆ dˆ dˆj	 ¡ d  g}ˆ |¡\}	}
}|	dkrât d| ¡ d|v rÝddˆg}t  t !ˆ¡d¡ t "t !t#|ƒ¡¡ dˆ_d S dQ‡‡‡‡fdd„‰ˆj	 $¡  %d d!¡ %d"d#¡‰t& '|
¡‰ g ˆ_(g  ˆ_)ˆ_*d‰dR‡ ‡‡‡‡‡‡fd'd(„}dˆ_i }ˆ d) D ]J}|||d* < |d+ s.q|d, d-kr@t  d.¡ dˆ_ d S |d* |krhd/ˆ_|d, d0vr`t  t !|¡d1¡ dˆ_ d S |d
 ˆ_+|ˆ_,qi }ˆ d2 D ]	}|||d3 < qp||vrždˆ_ˆj,d, d4kr•t  d5t !d4¡d6¡ n	t  d7t !ˆ¡¡ ˆjs­t  d8|› d9¡ d S d/ˆ_-|ˆj,ƒs»dˆ_d S || d: D ]}|| }||ƒsÒdˆ_ d S qÁˆrét "d;t !d<¡¡ t "t !ˆƒ ¡¡ || d= }|d> D ]	}ˆj( .|¡ qó|d? D ]}ˆj( .d@| ¡ q|dA D ]!}dB|ˆj	j/ vr n|ˆj	j/ dB }ˆj( .|› dC|› ¡ q|dD D ]!}d
|ˆj	j/ vrD n|ˆj	j/ d
 }ˆj( .|› dC|› ¡ q7|dE rfˆj( .|dE ¡ |dF D ]}| 0dG¡sx| 0dH¡r~ˆj) .|¡ qj|dI D ]	}ˆj) .|¡ q„ˆj1j2j3 4¡ }|rœg dJ¢}|dK D ]^}t5jdLkrãt6||dMdMdNœƒ}|jrã| 7¡ D ]	}ˆj( .|¡ q¹| 8¡ D ]	}ˆj) .|¡ qÇ|j8d/dOD ]	}ˆj* .|¡ q×q |rõ||v rõˆj) .|dG ¡ q ˆj) .dP| ¡ q d S )SNÚdubÚd)Úlanguager   )Ú	DCompilerÚd_feature_argsÚrequiredzDUB not found.Fz4Determining dependency {!r} with DUB executable {!r}Úversionú ú@Z	buildtypeZdebugoptimizedzrelease-debugZminsizeÚreleaseZdescribeú--arch=ú--build=ú--compiler=éÿÿÿÿr   zDUB describe failed: ZlocallyZfetchz:is not present locally. You may try the following command:Úreturnr   c               
     s4   dddddˆdˆ  dˆj  ¡ d  d	ˆ g	} t| ƒS )
Nr   Úrunzdub-build-deepz--yesz--r    r"   r#   r!   )ÚcompilerÚget_exelistr   )Úcmd)Údub_archÚdub_buildtypeÚmain_pack_specÚself© úzhome/ych/rk3568/buildroot/output/rockchip_rk3568_recovery/host/lib/python3.10/site-packages/mesonbuild/dependencies/dub.pyÚdub_build_deep_commandb   s
   ýz6DubDependency.__init__.<locals>.dub_build_deep_commandZllvmZldcZgccÚgdcÚpkgúT.Dict[str, str]Úboolc              	     sŠ  | d › d| d › }ˆ  ˆ | ˆ¡\}}|d u rª|s$t t |¡d¡ nvd|vr6t t |¡dt ˆ¡¡ ndˆdkrSd|vrSt t |¡d	t ˆ› d
ˆjj› ¡¡ nGd|vret t |¡dt ˆ¡¡ n5d|vr|t t |¡dt ˆ d  d¡¡¡ nd|vr‘t t |¡dt | d ¡d¡ n	t t |¡d¡ t d¡ t t ˆƒ ¡¡ dS d|vr½t t |¡dt ˆ¡¡ d‰ˆj	 
|¡ dS )Nr   r   r   z	not foundr&   zfound but not compiled with r0   Úcompiler_versionzfound but not compiled withú-Úarchzfound but not compiled forÚplatformÚ.Úconfigurationzfound but not compiled for thezIYou may try the following command to install the necessary DUB libraries:FÚ
build_typezfound but not compiled asT)Ú_find_compatible_package_targetr   ÚerrorÚboldr&   r   ÚjoinÚlogÚwarningÚ	link_argsÚappend)r1   Zpack_idZtgt_fileÚcompatibilities)Údescriptionr)   r/   r*   Údub_comp_idr,   Úshow_buildtype_warningr-   r.   Úfind_package_targetr   s0   *&"
z3DubDependency.__init__.<locals>.find_package_targetÚpackagesr   ZactiveZ
targetTypeZdynamicLibraryz3DUB dynamic library dependencies are not supported.T)ZlibraryÚsourceLibraryZstaticLibraryzfound but it isn't a libraryÚtargetsZrootPackagerI   zDUB targets of typezare not supported.z%Could not find target description forzCould not find z in DUB descriptionZlinkDependencieszKIf it is not suitable, try the following command and reconfigure Meson withz--clearcacheZbuildSettingsZdflagsZimportPathsz-IZstringImportPathsZ
import_dirú=ZversionsZmainSourceFileZsourceFilesz.libz.aZlflags)Úkernel32Zuser32Zgdi32ZwinspoolÚshell32Zole32Zoleaut32ÚuuidZcomdlg32Zadvapi32Zws2_32ZlibsÚntÚtrue)r   Úsilent)Úrawz-l)r$   r   )r1   r2   r$   r3   )9ÚsuperÚ__init__r   r   Zcompilers.dr   r   Zget_compilerÚ
isinstancer&   Úgetr   r   Úclass_dubbinÚ
_check_dubÚdubbinr   Zis_foundr   r   ÚdebugÚformatÚget_pathÚlistr>   r6   r   ZcoredataZ
get_optionr
   r'   Ú_call_dubbinr<   r=   r?   r   Zget_idÚreplaceÚjsonÚloadsZcompile_argsrA   Zraw_link_argsr   r1   ÚstaticrB   ÚidÚendswithÚenvZmachinesÚhostÚ
is_windowsÚosr   Zget_compile_argsZget_link_args)r,   r   r   r   r   r   Z
_temp_compZversion_specZdescribe_cmdÚretÚresÚerrZ	fetch_cmdrG   rH   r1   rJ   ZtgtZlink_depÚbsÚflagÚpathÚverÚfilerg   ZwinlibsÚlibZpkgdepÚarg©Ú	__class__)rD   r)   r/   r*   rE   r+   r,   rF   r.   rT       s  



ÿ


þ

,


€

þ
€îzDubDependency.__init__Újdescr2   ÚjpackrE   r$   úT.Tuple[str, T.Set[str]]c                   s  t j |d dd¡}t j |¡sdS |d }|d }|d }|d }g }	|d	kro|	 | jj¡ |  d
g¡dd… \}
}|
dkrJt 	dt 
|¡¡ dS t d|¡}|d uro| ¡ }| dd¡d  dd¡ dd¡}|	 ||g¡ tƒ }d}t  |¡D ]ƒ‰t j |ˆ|d ¡}t j |¡s“t d| ¡ qytƒ ‰ |ˆv rŸˆ  d¡ |ˆv r¨ˆ  d¡ t‡fdd„|D ƒƒr¸ˆ  d¡ t‡fdd„|D ƒƒrÈˆ  d¡ |ˆv rÑˆ  d¡ |d	ksàt‡fdd„|	D ƒƒråˆ  d¡ t‡ fdd„|D ƒƒrö|ˆ f  S t |ˆ ¡}qyd |fS )Nrn   z.dubÚbuild)NNr9   Z	buildTyper7   Úarchitecturer0   ú	--versionr   r   zFailed to run {!r}zv[0-9].[0-9][0-9][0-9].[0-9]r8   r   ÚvÚ )r9   r7   r6   r&   r4   ZtargetFileNamez&WARNING: Could not find a Dub target: r:   c                 3  ó    | ]}|ˆ v V  qd S ©Nr-   )Ú.0r7   ©Úentryr-   r.   Ú	<genexpr>c  ó   € z@DubDependency._find_compatible_package_target.<locals>.<genexpr>c                 3  r}   r~   r-   )r   r6   r€   r-   r.   r‚   f  rƒ   r6   r&   c                 3  r}   r~   r-   )r   Zcvr€   r-   r.   r‚   l  rƒ   r4   c                 3  r}   r~   r-   )r   Úkey)Úcompsr-   r.   r‚   o  rƒ   )rh   rn   r>   ÚexistsrB   r&   r   Ú_call_compbinr   r<   r=   ÚreÚsearchÚgroupÚrsplitr_   ÚextendÚsetÚlistdirrZ   ÚaddÚallÚanyÚunion)r,   ru   rv   rE   Zdub_build_pathZconfr:   Ú	platformsZarchsZcomp_versionsri   rj   Z	d_ver_regZfrontend_versionZfrontend_idrC   Z
check_listÚtargetr-   )r…   r   r.   r;   !  sV    





z-DubDependency._find_compatible_package_targetÚargsúT.List[str]re   úT.Optional[T.Dict[str, str]]úT.Tuple[int, str, str]c                 C  s@   t | jtƒsJ ‚t| j ¡ | |d\}}}|j| ¡ | ¡ fS ©N)re   )rU   rY   r   r	   Úget_commandÚ
returncodeÚstrip©r,   r•   re   ÚpÚoutrk   r-   r-   r.   r^   v  s   zDubDependency._call_dubbinc                 C  s0   t | j ¡ | |d\}}}|j| ¡ | ¡ fS r™   )r	   r&   r'   r›   rœ   r   r-   r-   r.   r‡   {  s   zDubDependency._call_compbinúT.Union[bool, ExternalProgram]c              	   C  sÐ   t ddd}t|t ƒsJ ‚| ¡ rDz%t| ¡ dg ƒdd… \}}|jdkr5t d d 	| ¡ ¡¡¡ d	}W n t
tfyC   d	}Y nw d	}t|t ƒr]t d
t | ¡ ¡d| ¡  ¡ |S t d
t d¡¡ |S )Nr   T)rQ   rz   r   r   z"Found dub {!r} but couldn't run itr   Fz
Found DUB:z(%s)ZNO)r   rU   Úfoundr	   rš   r›   r   r@   r[   r>   ÚFileNotFoundErrorÚPermissionErrorr?   r=   r\   rœ   Zred)r,   rY   rž   rŸ   r-   r-   r.   rX     s,   
ÿ€ÿ

ÿÿzDubDependency._check_dub)r   r   r   r   r   r   )ru   r2   rv   r2   rE   r   r$   rw   r~   )r•   r–   re   r—   r$   r˜   )r$   r    )
Ú__name__Ú
__module__Ú__qualname__rW   rT   r;   r^   r‡   rX   Ú__classcell__r-   r-   rs   r.   r      s      
Ur   )Ú
__future__r   Úbaser   r   r   Z	pkgconfigr   Zmesonlibr	   r
   r   Zprogramsr   r|   r   rˆ   rh   r`   ÚtypingÚTÚTYPE_CHECKINGr   r   r   r-   r-   r-   r.   Ú<module>   s   