
    e[N                       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 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 d0dZ d1dZ!d2dZ"d3dZ# G d de      Z$ G d d      Z% G d de%eejL                        Z' G d de%eejL                        Z( G d d      Z) G d  d!e(      Z* G d" d#e(      Z+ G d$ d%e)e(      Z, G d& d'e'      Z- G d( d)e'      Z. G d* d+e)e'      Z/ ed,e	j`                  e	jb                  ge-e*-      xed,<   Z2 ed.e	j`                  e	jb                  ge.e+-      xed.<   Z3 ed/e	j`                  e	jb                  ge/e,-      xed/<   Z4y)4    )annotationsN   )DependencyExceptionDependencyMethods)ConfigToolDependency)packages)ExtraFrameworkDependency)PkgConfigDependency)DependencyFactory   )mlog)mesonlib)Compiler)MachineInfo)Environment)MissingCompilerc           	     z   t        |j                  d      d         dk  rg S t        j                  j	                  | |      }t        j                  j                  |       rt        j                  j                  |      st        j                  |       D cg c]A  }t        j                  j                  t        j                  j	                  | |            r|C }}t        |d      D ]#  }t        |j                  d            dk(  s!|} n |t        j                  j	                  |d|z         gS c c}w )N.r      T)reverse   Qt)
intsplitospathjoinisdirexistslistdirsortedlen)mod_inc_dirmodulemod_versionprivate_dirfilenamedirsdirnames          </usr/lib/python3/dist-packages/mesonbuild/dependencies/qt.py_qt_get_private_includesr+   )   s     ;S!!$%)	'',,{K8K	ww}}[!"''..*E)+K)@ GX77==k8!DE  G G dD1 	G7==%&!+%	 k4&=ABBGs   AD8c                    d| v r| d   S | d   S )NQT_HOST_BINSQT_INSTALL_BINS qvarss    r*   get_qmake_host_binsr2   C   s#     ^$$"##    c                6    d| v r| d   S | j                  d      S )NQT_HOST_LIBEXECSQT_INSTALL_LIBEXECS)getr0   s    r*   get_qmake_host_libexecsr8   K   s&    U"'((99*++r3   c                   d}|j                         r|r|dz  }| j                  d      r|dz  }|j                         r|r|dz  }t        j                  | d      r|j                         r{|j                  dk(  r|dz  }|S |j                  dk(  r|d	z  }|S |j                  d
k(  r|dz  }|S |j                  dk(  r|dz  }|S t        j                  d|j                   d       |S )z7Get the module suffix based on platform and debug type. d4_debugz	>= 5.14.0x86_x86x86_64_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   version_compare
is_android
cpu_familyr   warning)versioninfois_debugsuffixs       r*   _get_modules_lib_suffixrO   Q   s	   FcMFc"cMF~~hF5??%'&  M H,)# M E).( M I-,& M 4T__4E F= = >Mr3   c                  ,     e Zd Zdd fdZdddZ xZS )QtExtraFrameworkDependencyc                T    t         |   ||||       |dd  | _        |d   | _        y )Nlanguager   QT_INSTALL_HEADERS)super__init__mod_nameqt_extra_include_directory)selfnameenvkwargsr1   rT   	__class__s         r*   rW   z#QtExtraFrameworkDependency.__init__m   s4    sFX>QR*/0D*E'r3   c                ,   | j                         r~t        j                  j                  | j                  d      }d|z   g}|r+|t        || j                  |      D cg c]  }d|z   	 c}z  }| j                  r|d| j                  z   gz  }|S g S c c}w )NHeaders-I)foundr   r   r   framework_pathr+   rX   rY   )rZ   with_private_headers
qt_versionr#   argsr)   s         r*   get_compile_argsz+QtExtraFrameworkDependency.get_compile_argsr   s    ::<'',,t':':IFK;&'D#7OP[]a]j]jlv7wxGxx.. ? ??@@K		 ys   BN)
r[   strr\   'Environment'r]   T.Dict[str, T.Any]r1   T.Dict[str, str]rT   T.Optional[str])F0)rd   boolre   ri   returnT.List[str])__name__
__module____qualname__rW   rg   __classcell__r^   s   @r*   rQ   rQ   l   s    F
	 	r3   rQ   c                  f    e Zd ZU dZded<   ded<   ded<   dZd	ed
<   ddZddZddZddZ	ddZ
y)_QtBasez>Mixin class for shared components between PkgConfig and Qmake.rq   	link_argsz&T.Union['MissingCompiler', 'Compiler']clib_compilerrj   r\   Nrm   
libexecdirc                @   || _         |j                         | _        |d   | _        | j                  dk(  rd| _        n| j                  | _        t        j                  d|j                  dd            | _        t        j                  t        j                  |d            | _        | j                  st        d| j                  z   d	z         t        j                  d|j                  d
d            | _        t        | j                  t               st        d      y )Nr<   r   ro   private_headersFmoduleszNo z  modules specified.mainz!"main" argument must be a boolean)r[   
capitalizeqtnameqtver	qtpkgnameTcastr7   r~   r   stringlistifyextract_as_listrequested_modulesr   qtmain
isinstancero   )rZ   r[   r]   s      r*   rW   z_QtBase.__init__   s    	oo'"X
::!DN![[DN vvffjj9JE.RS!)!7!78P8PQWYb8c!d%%%edkk&9<R&RSSffVVZZ%>?$++t,%&IJJ -r3   c                    t        j                  |      }| j                  |      }| j                  j	                  || j
                  |      }|r| j                  j                  |d          yy)Nr   TF)r   listifyget_qt_winmain_base_namerz   find_libraryr\   ry   append)rZ   rM   libdir	base_name
qt_winmains        r*   _link_with_qt_winmainz_QtBase._link_with_qt_winmain   s_    !!&)11(;	''44Y&Q
NN!!*Q-0r3   c                    |rdS dS )Nqtmaindr   r/   rZ   rM   s     r*   r   z _QtBase.get_qt_winmain_base_name   s    $y2(2r3   c                "    |j                         S rh   )get_pic_args)rZ   compilers     r*   get_exe_argsz_QtBase.get_exe_args   s     $$&&r3   c                P    ddj                  t        | j                               S )Nz	modules: z, )r   r!   r   rZ   s    r*   log_detailsz_QtBase.log_details   s$    499VD,B,B%CDEFFr3   )r[   ri   r]   rk   )rM   ro   r   zT.Union[str, T.List[str]]rp   ro   rM   ro   rp   ri   )r   z
'Compiler'rp   rq   rp   ri   )rr   rs   rt   __doc____annotations__r{   rW   r   r   r   r   r/   r3   r*   rx   rx   ~   s<    H99	"&J&K&3'Gr3   rx   c                      e Zd ZdZddZeej                  d	d              Zeej                  d	d              Z	ej                  d
d       Z
ddZy)QtPkgConfigDependencyz1Specialization of the PkgConfigDependency for Qt.c                   t         j                  | ||       t        j                  | | j                  dz   ||       d| j                  vrg | _        g | _        | j                  D ]  }t        | j                  |z   | j                  || j                        j                         s	d| _
         y | j                  rj                  d      }t        j                  j                  |d|z         }t        j                  j!                  |      s|}t#        ||j$                        }|D ]   }j
                  j'                  d|z          " | j)                  fdg        | j                  j*                  | j,                     j/                         r| j0                  r| j                  dz   t3        | j$                  | j                  j*                  | j,                     d	      z   }	d}
| j5                         D ]6  }|d
|	 k(  s)|j7                  |	 d      s|j7                  |	 d      s4d	}
 n | j                  d      }| j9                  |
|      sd| _
        y | j;                  |       | _        | j<                  s9| j                  d      }|r%t        j                  j                  |d      | _        | j?                  |       | _         y )NCorerS   F
includedir	pkgconfigr   ra   c                      S rh   r/   )mods   r*   <lambda>z0QtPkgConfigDependency.__init__.<locals>.<lambda>   s    c r3   Tz-lz.libz.ar   exec_prefixbin)!rx   rW   r
   r   r   compile_argsry   r\   rT   rb   is_foundr~   get_variabler   r   r   r   r+   rK   r   _add_sub_dependencymachinesfor_machinerD   r   rO   get_link_argsendswithr   get_pkgconfig_host_binsbindirget_pkgconfig_host_libexecsr{   )rZ   r[   r\   r]   m
qt_inc_dirmod_private_dirmod_private_inc	directorydebug_lib_namerM   argr   prefixr   s                 @r*   rW   zQtPkgConfigDependency.__init__   s   tV, 	$$T4>>F+BCP/// "DDN'' 	4A%dnnq&8$((FUYUbUbcC99; %## ---E
"$'',,z4!8"Dww}}_5 '1O":?As{{"[!0 >I$$++D9,<=>$$k]3%	4( 88T--.99;!^^f47Nt||]a]e]e]n]nosoo  ^A  CG  8H  HNH))+ B~.//3<<>BRRV@W3X\_\h\hlzk{{}i~\#H &&&:F--h? %2248{{&&&?F ggll659::4@r3   c                     y rh   r/   cores    r*   r   z-QtPkgConfigDependency.get_pkgconfig_host_bins        	r3   c                     y rh   r/   r   s    r*   r   z1QtPkgConfigDependency.get_pkgconfig_host_libexecs   r   r3   c                     y rh   r/   rZ   r#   r$   s      r*   get_private_includesz*QtPkgConfigDependency.get_private_includes       r3   c                     y)Nz
pkg-configr/   r   s    r*   log_infozQtPkgConfigDependency.log_info   s    r3   Nr[   ri   r\   rj   r]   rk   r   r
   rp   rm   r#   ri   r$   ri   rp   rq   r   )rr   rs   rt   r   rW   staticmethodabcabstractmethodr   r   r   r   r/   r3   r*   r   r      so    ;4Al       	 r3   r   )	metaclassc                  b    e Zd ZdZdZd
dZddZddZej                  dd       Z
ddZddZy	)QmakeQtDependencyz%Find Qt using Qmake as a config-tool.z-vc                	   t         j                  | ||       d| j                   | _        d| j                   d| j                   dg| _        |j                         }t        j                  |j                  dg             }|j                  d| j                   dt        | j                        dz    g       ||d<   t        j                  | |||       | j                         sy | j                  dgd      }i }|D ]2  }|j                         }|d	k(  r|j!                  d
d      \  }}	|	||<   4 |j                  dd	      | j"                  j$                  j&                  j)                         rht+        fddD              sTt-        j.                  d       | j1                  || j2                  |       | j4                  ry t-        j.                  d       |d   }
| j6                  j9                  d|
z          |d   }t;        |      | _        t?        |      | _         | j"                  jB                  jE                  t        jF                  d            dk(  }t        jF                  d      | j"                  jB                  jH                  v rD| j"                  jB                  jH                  t        jF                  d         jJ                  dv rd}tM        | jN                  | j"                  j$                  | jP                     |      }| j2                  D ]e  }tR        jT                  jW                  |
d|z         }| j6                  j9                  d|z          |dk(  rd}n|dk(  rd}n|jY                         }| j6                  j9                  d| d       | jZ                  r7| j]                  ||      }|D ]   }| j6                  j9                  d|z          " | j^                  ja                  | jb                  |z   |z   | j"                  t        j                  |            }|r|d   }n2t-        jd                  d || jb                  |z   |z   d!|       d"| _         n| jf                  j9                  |       h | j"                  j$                  | jP                     ji                         r(| jj                  r| jm                  ||      sd"| _        y y y y )#Nqmakezqmake-rK   z>= z< r   -queryrf   r:   :QMAKE_XSPECc              3  &   K   | ]  }|v  
 y wrh   r/   ).0sxspecs     r*   	<genexpr>z-QmakeQtDependency.__init__.<locals>.<genexpr>"  s     9^!u*9^s   )iostvosz)Building for macOS, looking for frameworkzKBuilding for macOS, couldn't find framework, falling back to library searchrU   ra   QT_INSTALL_LIBS	buildtypedebugb_vscrt>   mddmtdTr   	QuickTestQMLTESTTestTESTLIBz-DQT__LIBr   zCould not find:inF)7rx   rW   r   	tool_namer[   toolscopyr   r   r7   extendr   r   rb   get_config_valuestripr   r\   r   hostrF   anyr   r   _framework_detectr   r   r   r   r2   r   r8   r{   coredata
get_option	OptionKeyoptionsvaluerO   rK   r   r   r   r   upperr~   r   rz   r   r   logry   rD   r   r   )rZ   r[   r\   r]   _versstdor1   linekvincdirr   rM   modules_lib_suffixr$   mincdirdefine_basepriv_incr   libfileslibfiler   s                        @r*   rW   zQmakeQtDependency.__init__  sA   tV, -djj\*fTYYK,@'J
   Ir!:;DJJ<(Bs4::/B.C*DEF!y%%dD#v>zz| $$hZ8"$ 	D::<Drz::c1%DAqE!H	 		-,88!!++-c9^o9^6^JJBC""5$*@*@&I }}

hi+,  /())%01%8 88$$//0B0B;0OPT[[i(DHH,=,=,E,EExx  ((););I)FGMMQ__4T\\488CTCTUYUeUeCfhpq,, 	+Fggll64&=9G$$TG^4$'6!'$lln$$u[M%>?##44WfE!) ?I%%,,TI-=>?))66'*<<dhh  (*H "1+*F&03EEv' !&NN!!'*7	+: 88T--.99;--h? % @ AL;r3   c                    t        j                  d| j                   d|      }|r |j                  d      j	                  d      S |S )N(z	(\.\d+)+)r   r   )researchr   grouprstrip)rZ   rK   r   s      r*   _sanitize_versionz#QmakeQtDependency._sanitize_version[  s@    II4::,i0':771:$$S))r3   c                    d| gS )Nr   r/   )rZ   variable_names     r*   get_variable_argsz#QmakeQtDependency.get_variable_argsa  s    ]O--r3   c                     y rh   r/   r   s      r*   r   z&QmakeQtDependency.get_private_includesd  r   r3   c                d   |d   }|j                         }|j                  dd        |g|d<   |D ]  }d|z   }t        j                  d|z          t	        || j
                  ||| j                        }|j                         r|| j                  j                  d|z          | xj                  |j                  | j                  | j                        z  c_        | xj                  |j                         z  c_        d	| _         y  d
| _        t!        |      | _        t%        |      | _        y )Nr   methodpathsr   zLooking for qt framework rS   z-F)rd   re   FT)r   popr   r   rQ   r\   rT   rb   r   r   rg   r~   rK   ry   r   r   r2   r   r8   r{   )	rZ   r1   r   r]   r   	fw_kwargsr   fnamefwdeps	            r*   r   z#QmakeQtDependency._framework_detecth  s   () KKM	h%$X	' 	=A1HEJJ2U:;.udhh	5[_[h[hiE{{}!!((7!!U%;%;QUQeQeGK|| &< &U U!%"5"5"77 %	= !DM-e4DK5e<DOr3   c                     y)Nr   r/   r   s    r*   r   zQmakeQtDependency.log_info  s    r3   Nr   )rK   ri   rp   ri   )r  ri   rp   rq   r   )r1   rl   r   rq   r]   rk   rp   Noner   )rr   rs   rt   r   version_argrW   r  r  r   r   r   r   r   r/   r3   r*   r   r      s?    /KT&l. 	 =4r3   r   c                      e Zd ZddZy)Qt6WinMainMixinc                    |rdS dS )NQt6EntryPointdQt6EntryPointr/   r   s     r*   r   z(Qt6WinMainMixin.get_qt_winmain_base_name  s    #+@@r3   Nr   )rr   rs   rt   r   r/   r3   r*   r   r     s    Ar3   r   c                      e Zd ZddZy)Qt4ConfigToolDependencyc                    g S rh   r/   r   s      r*   r   z,Qt4ConfigToolDependency.get_private_includes      	r3   Nr   rr   rs   rt   r   r/   r3   r*   r%  r%    s    r3   r%  c                      e Zd ZddZy)Qt5ConfigToolDependencyc                0    t        ||| j                        S rh   r+   rK   r   s      r*   r   z,Qt5ConfigToolDependency.get_private_includes      'VT\\JJr3   Nr   r(  r/   r3   r*   r*  r*        Kr3   r*  c                      e Zd ZddZy)Qt6ConfigToolDependencyc                0    t        ||| j                        S rh   r,  r   s      r*   r   z,Qt6ConfigToolDependency.get_private_includes  r-  r3   Nr   r(  r/   r3   r*   r0  r0    r.  r3   r0  c                  8    e Zd Zedd       ZddZedd       Zy)Qt4PkgConfigDependencyc                    g d}|D ]6  }	 t         j                  j                  | j                  | d            c S  y # t        j
                  $ r Y Ow xY w)N)mocuicrcclupdatelrelease	_locationr   )r   r   r)   r   r   MesonException)r   applicationsapplications      r*   r   z.Qt4PkgConfigDependency.get_pkgconfig_host_bins  sf     D' 	Kwwt'8'8k]R[C\'8']^^	
  ** s   1AAAc                    g S rh   r/   r   s      r*   r   z+Qt4PkgConfigDependency.get_private_includes  r'  r3   c                     y rh   r/   r   s    r*   r   z2Qt4PkgConfigDependency.get_pkgconfig_host_libexecs      r3   Nr   r   r   r
   rp   ri   )rr   rs   rt   r   r   r   r   r/   r3   r*   r3  r3    s-       r3   r3  c                  8    e Zd Zedd       Zedd       ZddZy)Qt5PkgConfigDependencyc                &    | j                  d      S )N	host_binsr   r   r   s    r*   r   z.Qt5PkgConfigDependency.get_pkgconfig_host_bins  s      ; 77r3   c                     y rh   r/   r   s    r*   r   z2Qt5PkgConfigDependency.get_pkgconfig_host_libexecs  r@  r3   c                0    t        ||| j                        S rh   r,  r   s      r*   r   z+Qt5PkgConfigDependency.get_private_includes  r-  r3   NrA  r   )rr   rs   rt   r   r   r   r   r/   r3   r*   rC  rC    s.    8 8  Kr3   rC  c                  L     e Zd Zd fdZedd       Zedd       ZddZ xZS )Qt6PkgConfigDependencyc                    t         |   |||       | j                  s+t        j                  d| j
                   d       d| _        y y )Nzdetected Qt6 zC pkg-config dependency does not have proper tools support, ignoringF)rV   rW   r{   r   r   rK   r   )rZ   r[   r\   r]   r^   s       r*   rW   zQt6PkgConfigDependency.__init__  sG    sF+JJt||n 5= = >!DM r3   c                &    | j                  d      S )Nr   r   rF  r   s    r*   r   z.Qt6PkgConfigDependency.get_pkgconfig_host_bins  s      8 44r3   c                &    | j                  d      S )Nr{   r   rF  r   s    r*   r   z2Qt6PkgConfigDependency.get_pkgconfig_host_libexecs  s       < 88r3   c                0    t        ||| j                        S rh   r,  r   s      r*   r   z+Qt6PkgConfigDependency.get_private_includes  r-  r3   r   rA  r   )	rr   rs   rt   rW   r   r   r   r   ru   rv   s   @r*   rJ  rJ    s6    " 5 5 9 9Kr3   rJ  qt4)pkgconfig_classconfigtool_classqt5qt6)r#   ri   r$   ri   r%   ri   rp   rq   )r1   rl   rp   ri   )r1   rl   rp   rm   )rK   ri   rL   z'MachineInfo'rM   ro   rp   ri   )5
__future__r   r   r  r   typingr   baser   r   
configtoolr   detectr   	frameworkr	   r   r
   factoryr   r:   r   r   TYPE_CHECKING	compilersr   	envconfigr   environmentr   dependenciesr   r+   r2   r8   rO   rQ   rx   ABCMetar   r   r   r%  r*  r0  r3  rC  rJ  	PKGCONFIGCONFIG_TOOLqt4_factoryqt5_factoryqt6_factoryr/   r3   r*   <module>rf     s    # . 
 	 	  8 ,  / * &  ??$').C4$,6!9 $2G 2GjIG%8CKK IXD!5 DNA A/ K/ KKo/@ K2 0K2 KK_.C K, !2	  "3"?"?@*,	! + !2	  "3"?"?@*,	! + !2	  "3"?"?@*,	! +r3   