
    e5              
         d dl mZ ddlmZmZ ddlmZ d dlmZ d dl	Z
e
j                  rddlmZ ddlmZ d	d
dddddddd	Zdddddddddd	Zg dZd5dZ G d d e      Z G d! d"      Zd6d#Zd7d$Zd8d9d%Zd:d&Z G d' d(      Z G d) d*      Z G d+ d,      Z G d- d.      Z G d/ d0      Z G d1 d2      Z G d3 d4      Z y);    )annotations   )MesonException	OptionKey)mlog)PathN)Environment)TYPE_varCCXXCUDAOBJCOBJCXXCSharpJavaFortranSwift)	ccppcudaobjcobjcppcsjavafortranswiftNinjaXcodezVisual Studio 10 2010zVisual Studio 11 2012zVisual Studio 12 2013zVisual Studio 14 2015zVisual Studio 15 2017zVisual Studio 16 2019zVisual Studio 17 2022)	ninjaxcodevs2010vs2012vs2013vs2015vs2017vs2019vs2022)CMAKE_TOOLCHAIN_FILECMAKE_PROJECT_INCLUDEMESON_PRELOAD_FILE!MESON_PS_CMAKE_CURRENT_BINARY_DIR!MESON_PS_CMAKE_CURRENT_SOURCE_DIRMESON_PS_DELAYED_CALLSMESON_PS_LOADEDMESON_FIND_ROOT_PATHMESON_CMAKE_SYSROOTMESON_PATHS_LISTMESON_CMAKE_ROOTc                f   t        d      | j                  j                  v rY| j                  j                  t        d            dk(  }| j                  j                  t        d         j                  dv rd}|S | j                  j                  t        d            }t        |t              sJ |S )Nb_vscrt	buildtypedebug>   mddmtdT)r   coredataoptions
get_optionvalue
isinstancebool)envis_debug	debug_opts      9/usr/lib/python3/dist-packages/mesonbuild/cmake/common.pycmake_is_debugrC   B   s    s||333<<**9[+ABgM<<	) 45;;~MH LL++Ig,>?	)T***    c                      e Zd Zy)CMakeExceptionN)__name__
__module____qualname__ rD   rB   rF   rF   N   s    rD   rF   c                      e Zd ZddZddZy)CMakeBuildFilec                .    || _         || _        || _        y N)fileis_cmakeis_temp)selfrO   rP   rQ   s       rB   __init__zCMakeBuildFile.__init__R   s    	 rD   c           	         d| j                   j                   d| j                   d| j                   d| j                   d	S )N<z: z; cmake=z; temp=>)	__class__rG   rO   rP   rQ   rR   s    rB   __repr__zCMakeBuildFile.__repr__W   s?    4>>**+2dii[wW[WcWcVddeffrD   N)rO   r   rP   r>   rQ   r>   returnNonerZ   strrG   rH   rI   rS   rY   rJ   rD   rB   rL   rL   Q   s    
grD   rL   c                    g }d}d}d}| D ]?  }|r|dvr|dz  }||z  }d}|dk(  rd}|dv r| }&|dv r|r||z  }2||gz  }d};||z  }A ||gz  }|D cg c]  }t        |      dkD  s| }}|S c c}w )	N F)"'\T>   ra   rb   >   
 r   )len)rawrescurrescape	in_stringirs          rB   _flags_to_listrn   Z   s    
CDFI 
"AIDF$YF*_%I+	vAID%& D6MC
(SVaZ1
(C
(J )s   A3+A3c                    | j                   j                  t        d            }t        |t              sJ |t
        v sJ dt
        |   gS )Nbackendz-G)r9   r;   r   r=   r]   backend_generator_map)r?   backend_names     rB   cmake_get_generator_argsrs   w   sK    <<**9Y+?@LlC(((0000'566rD   c           	        g }| D ]  }|j                         D ]  \  }}|t        v rUt        j                  dt        j                  |      d       t        j                  d       t        j                  d       ct        |t        t        t        f      r|d| d| gz  }t        |t              r|rdnd}|d| d| gz  }t        d	j                  t        |      j                  |              |S )
NSettingCis not supported. See the meson docs for cross compilation support:C  - URL: https://mesonbuild.com/CMake-module.html#cross-compilation  --> Ignoring this option-D=ONOFFz>Type "{}" of "{}" is not supported as for a CMake define value)itemsblacklist_cmake_defsr   warningboldr=   r]   intfloatr>   r   formattyperG   )rg   
permissiverh   rl   keyvalval_strs          rB   cmake_defines_to_argsr   }   s   C G	 	GHC**Y		#8}~bc9:#S%01"SE3%())C&"%$5"SE7),--$%e%l%lmqrumvmm  BE  &F  G  G	GG JrD   c                6   g }t         D cg c]  }d|z   	 }}|sJ | D ]q  t        fd|D              rUt        j                  dt        j                        d       t        j                  d       t        j                  d       l|gz  }s |S c c}w )Nry   c              3  @   K   | ]  }j                  |        y wrN   )
startswith).0xrl   s     rB   	<genexpr>z#check_cmake_args.<locals>.<genexpr>   s     ,1q||A,s   ru   rv   rw   rx   )r~   anyr   r   r   )argsrh   r   disrl   s       @rB   check_cmake_argsr      s    C1
24!8
2C
2J3 ,,,LLDIIaL2wxLL^_LL56s
 J 3s   Bc                      e Zd ZdddZddZy)CMakeIncludec                     || _         || _        y rN   pathisSystem)rR   r   r   s      rB   rS   zCMakeInclude.__init__   s    	 rD   c                <    d| j                    d| j                   dS )Nz<CMakeInclude: z -- isSystem = rV   r   rX   s    rB   rY   zCMakeInclude.__repr__   s     ?4==/KKrD   NF)r   r   r   r>   r\   r^   rJ   rD   rB   r   r      s    !LrD   r   c                      e Zd ZddZddZy)CMakeFileGroupc           	        |j                  dd      | _        t        |j                  dd            | _        |j                  dd      | _        |j                  dd      | _        |j                  dg       D cg c]  }t        |       c}| _        g | _        |j                  d	g       D ]  }t        |t              rjd
|v rf|j                  dd      }t        |t              sJ t        |d
   t              sJ | xj                  t        t        |d
         |      gz  c_        }t        |t              s| xj                  t        t        |            gz  c_         y c c}w )Ndefinesr`   compileFlagsisGeneratedFlanguager   sourcesincludePathr   r   )getr   rn   flagsis_generatedr   r   r   includesr=   dictr>   r]   r   )rR   datar   rl   r   s        rB   rS   zCMakeFileGroup.__init__   s"    HHY3#DHH^R$@A
"&((=%"@!XXj#6)-)R)@AAQA /1-, 	9A!T"v{55U3!(D111!!F)S111,tAfI"I!JJAs#,tAw"7!88	9	 Bs   :E&c                   t        j                  dt        j                  dj                  | j                                     t        j                  dt        j                  dj                  | j
                                     t        j                  dt        j                  dj                  | j                  D cg c]  }t        |       c}                   t        j                  dt        j                  | j                  rdnd             t        j                  dt        j                  | j                               t        j                  d	       | j                  D ]B  }t        j                         5  t        j                  |j                                d d d        D y c c}w # 1 sw Y   TxY w)
Nzflags        =, zdefines      =zincludes     =zis_generated =truefalsezlanguage     =zsources:)r   logr   joinr   r   r   r]   r   r   r   nestedas_posix)rR   r   rl   s      rB   r   zCMakeFileGroup.log   s   !499TYYtzz-B#CD!499TYYt||-D#EF!499TYY7V1A7V-W#XY!499t7H7HVg#VW!499T]]#;< 	'A '&' '	'	 8W
' 's   =F/ $F44F=	Nr   zT.Dict[str, T.Any]rZ   r[   rZ   r[   rG   rH   rI   rS   r   rJ   rD   rB   r   r      s    9$	'rD   r   c                      e Zd ZddZddZy)CMakeTargetc                   |j                  dg       D cg c]  }t        |       c}| _        t        |j                  dd            | _        t        |j                  dd            | _        |j                  dd      | _        |j                  dd      | _        |j                  dd      | _        t        |j                  d	g             D cg c]  }t        |       c}| _	        |j                  d
d      | _
        t        |j                  dd            | _        t        |j                  dd            | _        t        |j                  dd            | _        |j                  dd      | _        g | _        |j                  dg       D ]!  }| xj                   t#        |      gz  c_        # y c c}w c c}w )N	artifactssourceDirectoryr`   buildDirectorynamefullNamehasInstallRuleFinstallPathslinkerLanguagelinkLibraries	linkFlagslinkLanguageFlagsr   
EXECUTABLE
fileGroups)r   r   r   src_dir	build_dirr   	full_nameinstallsetinstall_paths	link_langrn   link_libraries
link_flagslink_lang_flagsr   filesr   )rR   r   r   rl   s       rB   rS   zCMakeTarget.__init__   sa   +/88K+DEa$q'EDHH%6;<dhh'7<=&"-	"hhz26!XX&6>/2488NB3O/PQ!d1gQ"hh'7<,TXXor-JK(+r)BC-dhh7JB.OP&,7	-/
,+ 	.AJJ>!,--J	.! F Rs   F7F<c                   t        j                  dt        j                  dj                  | j                  D cg c]  }|j                          c}                   t        j                  dt        j                  | j                  j                                      t        j                  dt        j                  | j                  j                                      t        j                  dt        j                  | j                               t        j                  dt        j                  | j                               t        j                  dt        j                  | j                  rdnd	             t        j                  d
t        j                  dj                  | j                  D cg c]  }|j                          c}                   t        j                  dt        j                  | j                               t        j                  dt        j                  dj                  | j                                     t        j                  dt        j                  dj                  | j                                     t        j                  dt        j                  dj                  | j                                     t        j                  dt        j                  | j                                t#        | j$                        D ]K  \  }}t        j                  d| d       t        j&                         5  |j                          d d d        M y c c}w c c}w # 1 sw Y   bxY w)Nzartifacts             =r   zsrc_dir               =zbuild_dir             =zname                  =zfull_name             =zinstall               =r   r   zinstall_paths         =zlink_lang             =zlink_libraries        =zlink_flags            =zlink_lang_flags       =ztype                  =zFiles :)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   	enumerater   r   )rR   r   idxrl   s       rB   r   zCMakeTarget.log   s.   *DIIdiiW[WeWe@fRS@f6g,hi*DIIdll6K6K6M,NO*DIIdnn6M6M6O,PQ*DIIdii,@A*DIIdnn,EF*DIIfRY,Z[*DIIdiiW[WiWi@jRS@j6k,lm*DIIdnn,EF*DIIdii@S@S6T,UV*DIIdii6P,QR*DIIdii@T@T6U,VW*DIIdii,@A

+ 	FCHHvcU!_%  	 Ag Ak s   M,6M1M66M?	Nr   r   r   rJ   rD   rB   r   r      s    .(rD   r   c                      e Zd ZddZddZy)CMakeProjectc                ,   t        |j                  dd            | _        t        |j                  dd            | _        |j                  dd      | _        g | _        |j                  dg       D ]!  }| xj
                  t        |      gz  c_        # y )Nr   r`   r   r   targets)r   r   r   r   r   r   r   rR   r   rl   s      rB   rS   zCMakeProject.__init__   sz    DHH%6;<dhh'7<=&"-	,.)R( 	-ALL[^,,L	-rD   c                L   t        j                  dt        j                  | j                  j	                                      t        j                  dt        j                  | j
                  j	                                      t        j                  dt        j                  | j                               t        | j                        D ]K  \  }}t        j                  d| d       t        j                         5  |j                          d d d        M y # 1 sw Y   XxY w)Nzsrc_dir   =zbuild_dir =zname      =zTarget r   )
r   r   r   r   r   r   r   r   r   r   rR   r   rl   s      rB   r   zCMakeProject.log   s    		$,,*?*?*A BC		$..*A*A*C DE		$)) 45- 	FCHHwse1%&  	 s   >DD#	Nr   r   r   rJ   rD   rB   r   r      s    -rD   r   c                      e Zd ZddZddZy)CMakeConfigurationc                    |j                  dd      | _        g | _        |j                  dg       D ]!  }| xj                  t        |      gz  c_        # y )Nr   r`   projects)r   r   r   r   r   s      rB   rS   zCMakeConfiguration.__init__  sJ    &"-	.0*b) 	/AMMl1o..M	/rD   c                H   t        j                  dt        j                  | j                               t	        | j
                        D ]K  \  }}t        j                  d| d       t        j                         5  |j                          d d d        M y # 1 sw Y   XxY w)Nzname =zProject r   )r   r   r   r   r   r   r   r   s      rB   r   zCMakeConfiguration.log  sz    499TYY/0. 	FCHHxuA&'  	 s   <BB!	Nr   r   r   rJ   rD   rB   r   r     s    /rD   r   c                  T    e Zd ZddZddZddZddZddZddZddZ	ddZ
dd	Zy
)SingleTargetOptionsc                <    i | _         i | _        g | _        d| _        y )Npreserve)opts	lang_args	link_argsr   rX   s    rB   rS   zSingleTargetOptions.__init__  s    &(	35&(!rD   c                "    || j                   |<   y rN   )r   )rR   optr   s      rB   set_optzSingleTargetOptions.set_opt  s    		#rD   c                l    || j                   vrg | j                   |<   | j                   |xx   |z  cc<   y rN   r   )rR   langr   s      rB   append_argszSingleTargetOptions.append_args  s0    t~~%#%DNN4 t$rD   c                .    | xj                   |z  c_         y rN   r   )rR   r   s     rB   append_link_argsz$SingleTargetOptions.append_link_args  s    $rD   c                &    |rd| _         y d| _         y )Nr   r   r   )rR   r   s     rB   set_installzSingleTargetOptions.set_install!  s    !(vgrD   c                    g }|D ]+  }|d |j                  d       }|| j                  vs&||gz  }- || j                  j                         D cg c]  \  }}| d|  c}}z  }|S c c}}w )Nrz   )findr   r}   )rR   initialrh   rl   r   kvs          rB   get_override_optionsz(SingleTargetOptions.get_override_options$  sz     	ALQVVC[/C$))#s
	 	tyy'89tq!1#Qqc
99
 :s   A*c                F    || j                   v r|| j                   |   z   S |S rN   r   )rR   r   r   s      rB   get_compile_argsz$SingleTargetOptions.get_compile_args-  s'    4>>!T^^D111rD   c                     || j                   z   S rN   r   rR   r   s     rB   get_link_argsz!SingleTargetOptions.get_link_args2  s    ''rD   c                (    |ddd| j                      S )NTF)r   r   r   r   r   s     rB   get_installzSingleTargetOptions.get_install5  s    #TEB4<<PPrD   Nr   )r   r]   r   r]   rZ   r[   )r   r]   r   T.List[str]rZ   r[   )r   r  rZ   r[   )r   r>   rZ   r[   )r   r  rZ   r  )r   r]   r   r  rZ   r  )r   r>   rZ   r>   )rG   rH   rI   rS   r   r   r   r   r   r   r   r  rJ   rD   rB   r   r     s0    "%
6
(QrD   r   c                  <    e Zd ZddZd	dZd
dZddZd
dZddZy)TargetOptionsc                0    t               | _        i | _        y rN   )r   global_optionstarget_optionsrX   s    rB   rS   zTargetOptions.__init__9  s    13@BrD   c                j    || j                   vrt               | j                   |<   | j                   |   S rN   )r  r   )rR   tgts     rB   __getitem__zTargetOptions.__getitem__=  s4    d)))':'<D$""3''rD   c                    | j                   j                  |      }|| j                  v r| j                  |   j                  |      }|S rN   )r  r   r  rR   r	  r   s      rB   r   z"TargetOptions.get_override_optionsB  sF    %%::7C$%%%))#.CCGLGrD   c                    | j                   j                  ||      }|| j                  v r| j                  |   j                  ||      }|S rN   )r  r   r  )rR   r	  r   r   s       rB   r   zTargetOptions.get_compile_argsH  sJ    %%66tWE$%%%))#.??gNGrD   c                    | j                   j                  |      }|| j                  v r| j                  |   j                  |      }|S rN   )r  r   r  r  s      rB   r   zTargetOptions.get_link_argsN  sF    %%33G<$%%%))#.<<WEGrD   c                    | j                   j                  |      }|| j                  v r| j                  |   j                  |      }|S rN   )r  r  r  r  s      rB   r  zTargetOptions.get_installT  sF    %%11':$%%%))#.::7CGrD   Nr   )r	  r]   rZ   r   )r	  r]   r   r  rZ   r  )r	  r]   r   r]   r   r  rZ   r  )r	  r]   r   r>   rZ   r>   )	rG   rH   rI   rS   r
  r   r   r   r  rJ   rD   rB   r  r  8  s!    C(
rD   r  )r?   'Environment'rZ   r>   )rg   r]   rZ   r  )r?   r  rZ   r  r   )rg   zT.List[T.Dict[str, TYPE_var]]r   r>   rZ   r  )r   r  rZ   r  )!
__future__r   mesonlibr   r   r`   r   pathlibr   typingTTYPE_CHECKINGenvironmentr	   interpreterbaser
   language_maprq   r~   rC   rF   rL   rn   rs   r   r   r   r   r   r   r   r   r  rJ   rD   rB   <module>r     s   " # 0   ??)* 


 %%%%%%%
  
	^ 	g g:7*L L' '<' 'R & 'Q 'QR   rD   