o
    SodL                     @  s  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	 ddl
mZ ddlmZ ddlmZ ddlmZ d	d
lmZ d	dlmZ ejr^d	dlmZ d	dlmZ d	dlmZ d	dlmZ dAddZdBddZdCddZ dDd$d%Z!G d&d' d'eZ"G d(d) d)Z#G d*d+ d+e#eej$d,Z%G d-d. d.e#eej$d,Z&G d/d0 d0Z'G d1d2 d2e&Z(G d3d4 d4e&Z)G d5d6 d6e'e&Z*G d7d8 d8e%Z+G d9d: d:e%Z,G d;d< d<e'e%Z-ed=e	j.e	j/ge+e(d>Z0ed?e	j.e	j/ge,e)d>Z1ed@e	j.e	j/ge-e*d>Z2dS )E    )annotationsN   )DependencyExceptionDependencyMethods)ConfigToolDependency)ExtraFrameworkDependency)PkgConfigDependency)DependencyFactory   )mlog)mesonlib)Compiler)MachineInfo)Environment)MissingCompilermod_inc_dirstrmodulemod_versionreturnT.List[str]c                   s   t |dd dk rg S tj |}tj|s< fddt D }t|ddD ]}t|ddkr;|} nq,|tj|d	| gS )
N.r      c                   s&   g | ]}t jt j |r|qS  )ospathisdirjoin).0filenamer   r   yhome/ych/rk3568/buildroot/output/rockchip_rk3568_recovery/host/lib/python3.10/site-packages/mesonbuild/dependencies/qt.py
<listcomp>8   s    
z,_qt_get_private_includes.<locals>.<listcomp>T)reverse   Qt)	intsplitr   r   r   existslistdirsortedlen)r   r   r   Zprivate_dirdirsdirnamer   r    r!   _qt_get_private_includes(   s   
r.   qvarsT.Dict[str, str]c                 C  s   d| v r| d S | d S )NZQT_HOST_BINSZQT_INSTALL_BINSr   r/   r   r   r!   get_qmake_host_binsB   s   r2   T.Optional[str]c                 C  s   d| v r| d S |  dS )NZQT_HOST_LIBEXECSZQT_INSTALL_LIBEXECS)getr1   r   r   r!   get_qmake_host_libexecsJ   s   
r5   versioninfo'MachineInfo'is_debugboolc                 C  s   d}|  r|r|d7 }| dr|d7 }| r|r|d7 }t| dr_| r_|jdkr4|d7 }|S |jdkr?|d	7 }|S |jd
krJ|d7 }|S |jdkrU|d7 }|S td|j d |S )z7Get the module suffix based on platform and debug type. d4Z_debugz	>= 5.14.0x86Z_x86x86_64Z_x86_64armz_armeabi-v7aaarch64z
_arm64-v8azAndroid target arch "z4"" for Qt5 is unknown, module detection may not work)	
is_windows
startswith	is_darwinr   Zversion_compareZ
is_androidZ
cpu_familyr   warning)r6   r7   r9   suffixr   r   r!   _get_modules_lib_suffixP   s2   





rG   c                      s,   e Zd Zdd fd
dZddddZ  ZS )QtExtraFrameworkDependencyNnamer   env'Environment'kwargsT.Dict[str, T.Any]languager3   c                   s&   t  j||||d |dd  | _d S )NrN   r
   )super__init__mod_name)selfrI   rJ   rL   rN   	__class__r   r!   rQ   l   s   z#QtExtraFrameworkDependency.__init__F0with_private_headersr:   
qt_versionr   r   c                 C  sJ   |   r#tj| jd}d| g}|r!|dd t|| j|D 7 }|S g S )NZHeaders-Ic                 S  s   g | ]}d | qS )rY   r   )r   r-   r   r   r!   r"   u   s    z?QtExtraFrameworkDependency.get_compile_args.<locals>.<listcomp>)foundr   r   r   Zframework_pathr.   rR   )rS   rW   rX   r   argsr   r   r!   get_compile_argsp   s   
z+QtExtraFrameworkDependency.get_compile_argsN)rI   r   rJ   rK   rL   rM   rN   r3   )FrV   )rW   r:   rX   r   r   r   )__name__
__module____qualname__rQ   r\   __classcell__r   r   rT   r!   rH   k   s    rH   c                   @  sh   e Zd ZU dZded< ded< ded< dZd	ed
< d ddZd!ddZd"ddZd#ddZ	d$ddZ
dS )%_QtBasez>Mixin class for shared components between PkgConfig and Qmake.r   	link_argsz&T.Union['MissingCompiler', 'Compiler']clib_compilerrK   rJ   Nr3   
libexecdirrI   r   rL   rM   c                 C  s   || _ | | _|d | _| jdkrd| _n| j| _td|dd| _t	
t	|d| _| js;td| j d	 td|d
d| _t| jtsPtdd S )Nr=   r%   r:   private_headersFmoduleszNo z  modules specified.mainz!"main" argument must be a boolean)rI   
capitalizeZqtnameqtver	qtpkgnameTcastr4   rg   r   ZstringlistifyZextract_as_listrequested_modulesr   qtmain
isinstancer:   )rS   rI   rL   r   r   r!   rQ      s   


z_QtBase.__init__r9   r:   libdirT.Union[str, T.List[str]]r   c                 C  sB   t |}| |}| j|| j|}|r| j|d  dS dS )Nr   TF)r   listifyget_qt_winmain_base_namerd   find_libraryrJ   rc   append)rS   r9   rr   	base_nameZ
qt_winmainr   r   r!   _link_with_qt_winmain   s   

z_QtBase._link_with_qt_winmainc                 C     |rdS dS )NZqtmaindrp   r   rS   r9   r   r   r!   ru         z _QtBase.get_qt_winmain_base_namecompiler
'Compiler'c                 C  s   |  S r]   )Zget_pic_args)rS   r}   r   r   r!   get_exe_args   s   z_QtBase.get_exe_argsc                 C  s   dd t| j S )Nz	modules: z, )r   r*   ro   rS   r   r   r!   log_details   s   z_QtBase.log_details)rI   r   rL   rM   )r9   r:   rr   rs   r   r:   r9   r:   r   r   )r}   r~   r   r   r   r   )r^   r_   r`   __doc____annotations__re   rQ   ry   ru   r   r   r   r   r   r!   rb   z   s   
 


	
	rb   c                   @  s\   e Zd ZdZddd	ZeejdddZeejdddZ	ejdddZ
dddZdS )QtPkgConfigDependencyz1Specialization of the PkgConfigDependency for Qt.rI   r   rJ   rK   rL   rM   c                   s  t | || t| | jd || d| jvrg | _g | _| jD ]R}t| j| | j|| jd  	 s9d| _
 d S | jrh dg d }tj|d| }tj|sT|}t|| j}|D ]
} jd|  q]|  fddg q | jj| j  r| jr| jd t| j| jj| j d	 }	d}
|  D ]}|d
|	 ks||	 ds||	 drd	}
 nq| dg d }| |
|sd| _
d S | | | _| js| dg d }|rtj|d| _| | | _ d S )NZCorerO   FZ
includedirr%   rY   c                     s    S r]   r   r   modr   r!   <lambda>   s    z0QtPkgConfigDependency.__init__.<locals>.<lambda>Tz-lz.libz.arr   exec_prefixbin)!rb   rQ   r   rl   ro   compile_argsrc   rJ   rN   rZ   is_foundrg   get_pkgconfig_variabler   r   r   r   r.   r6   rw   Z_add_sub_dependencymachinesfor_machinerB   rp   rG   get_link_argsendswithry   get_pkgconfig_host_binsbindirget_pkgconfig_host_libexecsre   )rS   rI   rJ   rL   mZ
qt_inc_dirZmod_private_dirZmod_private_inc	directoryZdebug_lib_namer9   argrr   prefixr   r   r!   rQ      sJ   

".zQtPkgConfigDependency.__init__corer   r   r3   c                 C     d S r]   r   r   r   r   r!   r         z-QtPkgConfigDependency.get_pkgconfig_host_binsc                 C  r   r]   r   r   r   r   r!   r      r   z1QtPkgConfigDependency.get_pkgconfig_host_libexecsr   r   r   c                 C  r   r]   r   rS   r   r   r   r   r!   get_private_includes      z*QtPkgConfigDependency.get_private_includesc                 C     dS )Nz
pkg-configr   r   r   r   r!   log_info      zQtPkgConfigDependency.log_infoNrI   r   rJ   rK   rL   rM   r   r   r   r3   r   r   r   r   r   r   r   )r^   r_   r`   r   rQ   staticmethodabcabstractmethodr   r   r   r   r   r   r   r!   r      s    
6r   )	metaclassc                   @  sL   e Zd ZdZdZdd	d
ZdddZejdddZ	d ddZ
d!ddZdS )"QmakeQtDependencyz%Find Qt using Qmake as a config-tool.z-vrI   r   rJ   rK   rL   rM   c                   s  t | || d| j | _d| j d| j dg| _| }t|	dg }|
d| j dt| jd  g ||d< t| ||| |  sNd S | dgd}i }|D ]}| }|d	krdqY|d
d\}}	|	||< qY|	dd	 | jjj rt fdddD std | || j| | jrd S td |d }
| jd|
  |d }t|| _t|| _ | jj!"t#ddk}t#d| jj!j$v r| jj!j$t#d j%dv rd}t&| j'| jj| j( |}| jD ]{}t)j*+|
d| }| jd|  |dkr	d}n|dkrd}n|, }| jd| d | j-r7| .||}|D ]}| jd|  q+| j/0| j1| | | jt|}|rP|d  }nt2d!|| j1| | d"| d#| _ n| j3| q| jj| j( 4 r| j5r| 6||sd#| _d S d S d S d S )$Nqmakezqmake-r6   z>= z< r   z-queryr[   r;   :ZQMAKE_XSPECc                 3  s    | ]}| v V  qd S r]   r   )r   sZxspecr   r!   	<genexpr>  s    z-QmakeQtDependency.__init__.<locals>.<genexpr>)ZiosZtvosz)Building for macOS, looking for frameworkzKBuilding for macOS, couldn't find framework, falling back to library searchZQT_INSTALL_HEADERSrY   QT_INSTALL_LIBSZ	buildtypedebugZb_vscrt>   ZmddZmtdTr%   Z	QuickTestZQMLTESTZTestZTESTLIBz-DQT_Z_LIBr   zCould not find:inF)7rb   rQ   rk   Z	tool_namerI   toolscopyr   rt   r4   extendr&   r   rZ   Zget_config_valuestripr'   rJ   r   hostrD   anyr   r   _framework_detectro   r   r   rw   r2   r   r5   re   ZcoredataZ
get_optionZ	OptionKeyoptionsvaluerG   r6   r   r   r   r   upperrg   r   rd   rv   rl   logrc   rB   rp   ry   )rS   rI   rJ   rL   Z_versZstdor/   linekvincdirrr   r9   Zmodules_lib_suffixr   ZmincdirZdefine_baseZpriv_incr   ZlibfilesZlibfiler   r   r!   rQ     s   &
$








zQmakeQtDependency.__init__r6   r   c                 C  s.   t d| j d|}|r|ddS |S )N(z	(\.\d+)+)r   r   )researchrk   grouprstrip)rS   r6   r   r   r   r!   _sanitize_versionW  s   z#QmakeQtDependency._sanitize_versionr   r   r   c                 C  r   r]   r   r   r   r   r!   r   ]  r   z&QmakeQtDependency.get_private_includesr/   r0   rh   Nonec           	      C  s   |d }|  }|dd  |g|d< |D ]@}d| }td|  t|| j|| jd}| rP| j	d|  |  j|j
| j| jd7  _|  j| 7  _qd	| _ d S d
| _t|| _t|| _d S )Nr   methodpathsr%   zLooking for qt framework rO   z-F)rW   rX   FT)r   popr   r   rH   rJ   rN   rZ   r   rw   r\   rg   r6   rc   r   r   r2   r   r5   re   )	rS   r/   rh   rL   rr   Z	fw_kwargsr   fnameZfwdepr   r   r!   r   a  s&   


z#QmakeQtDependency._framework_detectc                 C  r   )Nr   r   r   r   r   r!   r   {  r   zQmakeQtDependency.log_infoNr   )r6   r   r   r   r   )r/   r0   rh   r   rL   rM   r   r   r   )r^   r_   r`   r   Zversion_argrQ   r   r   r   r   r   r   r   r   r   r!   r      s    

V
r   c                   @  s   e Zd ZdddZdS )	Qt6WinMainMixinr9   r:   r   r   c                 C  rz   )NZQt6EntryPointdZQt6EntryPointr   r{   r   r   r!   ru     r|   z(Qt6WinMainMixin.get_qt_winmain_base_nameNr   )r^   r_   r`   ru   r   r   r   r!   r         r   c                   @     e Zd Zd	ddZdS )
Qt4ConfigToolDependencyr   r   r   r   r   c                 C     g S r]   r   r   r   r   r!   r     r   z,Qt4ConfigToolDependency.get_private_includesNr   r^   r_   r`   r   r   r   r   r!   r     r   r   c                   @  r   )
Qt5ConfigToolDependencyr   r   r   r   r   c                 C     t ||| jS r]   r.   r6   r   r   r   r!   r        z,Qt5ConfigToolDependency.get_private_includesNr   r   r   r   r   r!   r     r   r   c                   @  r   )
Qt6ConfigToolDependencyr   r   r   r   r   c                 C  r   r]   r   r   r   r   r!   r     r   z,Qt6ConfigToolDependency.get_private_includesNr   r   r   r   r   r!   r     r   r   c                   @  s2   e Zd ZedddZdddZedddZdS )Qt4PkgConfigDependencyr   r   r   r3   c              	   C  sL   g d}|D ]}zt j| | dg d W   S  tjy#   Y qw d S )N)ZmocZuicZrccZlupdateZlreleaseZ	_location)r   r   r-   r   r   ZMesonException)r   ZapplicationsZapplicationr   r   r!   r     s   "z.Qt4PkgConfigDependency.get_pkgconfig_host_binsr   r   r   r   c                 C  r   r]   r   r   r   r   r!   r     r   z+Qt4PkgConfigDependency.get_private_includesc                 C  r   r]   r   r   r   r   r!   r     r   z2Qt4PkgConfigDependency.get_pkgconfig_host_libexecsNr   r   r   r   r   r   )r^   r_   r`   r   r   r   r   r   r   r   r!   r     s    
r   c                   @  s2   e Zd ZedddZedddZdddZdS )Qt5PkgConfigDependencyr   r   r   r   c                 C     |  dg d S )NZ	host_binsr   r   r   r   r!   r        z.Qt5PkgConfigDependency.get_pkgconfig_host_binsc                 C  r   r]   r   r   r   r   r!   r     r   z2Qt5PkgConfigDependency.get_pkgconfig_host_libexecsr   r   r   c                 C  r   r]   r   r   r   r   r!   r     r   z+Qt5PkgConfigDependency.get_private_includesNr   r   )r^   r_   r`   r   r   r   r   r   r   r   r!   r     s    r   c                      sD   e Zd Zd fddZedddZedddZdddZ  ZS )Qt6PkgConfigDependencyrI   r   rJ   rK   rL   rM   c                   s8   t  ||| | jstd| j d d| _d S d S )Nzdetected Qt6 zC pkg-config dependency does not have proper tools support, ignoringF)rP   rQ   re   r   r   r6   r   )rS   rI   rJ   rL   rT   r   r!   rQ     s
   
zQt6PkgConfigDependency.__init__r   r   r   c                 C  r   )Nr   r   r   r   r   r!   r     r   z.Qt6PkgConfigDependency.get_pkgconfig_host_binsc                 C  r   )Nre   r   r   r   r   r!   r     s   z2Qt6PkgConfigDependency.get_pkgconfig_host_libexecsr   r   r   c                 C  r   r]   r   r   r   r   r!   r     r   z+Qt6PkgConfigDependency.get_private_includesr   r   r   )	r^   r_   r`   rQ   r   r   r   r   ra   r   r   rT   r!   r     s    r   Zqt4)Zpkgconfig_classZconfigtool_classZqt5Zqt6)r   r   r   r   r   r   r   r   )r/   r0   r   r   )r/   r0   r   r3   )r6   r   r7   r8   r9   r:   r   r   )3
__future__r   r   r   r   typingrm   baser   r   Z
configtoolr   Z	frameworkr   Z	pkgconfigr   factoryr	   r;   r   r   TYPE_CHECKING	compilersr   Z	envconfigr   environmentr   dependenciesr   r.   r2   r5   rG   rH   rb   ABCMetar   r   r   r   r   r   r   r   r   Z	PKGCONFIGZCONFIG_TOOLZqt4_factoryZqt5_factoryZqt6_factoryr   r   r   r!   <module>   sh   



5L 



