
    -Ph                       d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZ	d dl
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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 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,        r2ddl-m.Z. ddlm/Z/ ddl0m1Z1 ddlm2Z2 d dl3m4Z4 ddl5m6Z6  G d de4          Z7dBdZ8 G d d e          Z9 G d! d"e+          Z: G d# d$e          Z; G d% d&e+          Z< G d' d(e#          Z= G d) d*e!          Z> G d+ d,e+          Z?e?e%d-<    G d. d/e          Z@ G d0 d1e          ZAeAe%d2<    G d3 d4eA          ZBeBe%d5<    G d6 d7e          ZCeCe%d8<    e'd9ejD        ejE        ge>e=:          xe%d;<   ZF e'd<ejG        ejH        ge:e9=          xe%d<<   ZI e'd>ejG        ejH        ge<e;=          xe%d><   ZJ e'd?ejG        ejD        ejH        gd@e@A          xe%d?<   ZKdS )C    )annotationsN)FeatureDeprecated   )mesonlibmlog)get_llvm_tool_names)version_compareversion_compare_manysearch_versionstringlistifyextract_as_list   )DependencyExceptionDependencyMethodsdetect_compilerstrip_system_includedirsstrip_system_libdirsSystemDependencyExternalDependencyDependencyTypeName)CMakeDependency)ConfigToolDependency)packages)DependencyFactory)threads_factory)PkgConfigDependency)MachineInfo)Environment)Compiler)MachineChoice)	TypedDict)PkgConfigDefineTypec                  $    e Zd ZU ded<   ded<   dS )JNISystemDependencyKWT.List[str]modulesT.Optional[str]versionN)__name__
__module____qualname____annotations__     [/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mesonbuild/dependencies/dev.pyr$   r$   $   s,          	!     r.   r$   environment'Environment'for_machiner    returnstrc                x    | j         |         }|                                rdS |                                rdS dS )zThis is only guaranteed to work for languages that compile to machine
    code, not for languages like C# that use a bytecode and always end in .dll
    .dllz.dylib.so)machines
is_windows	is_darwin)r0   r2   ms      r/   get_shared_library_suffixr<   +   s@     	[)A||~~ v	
 x5r.   c                  8     e Zd Zd fd	Zdd
ZddZddZ xZS )GTestDependencySystemnamer4   r0   r1   kwargsT.Dict[str, T.Any]r3   Nonec                ~   t                                          |||d           |                    dd          | _        |j        | j                                                 pd}|dz   |dz   g| _        |                     t          || j        i                     s	d| _
        d S |                                  d S )NcpplanguagemainF z/usr/src/gtest/srcz"/usr/src/googletest/googletest/src)super__init__getrG   
propertiesr2   get_sys_rootsrc_dirs_add_sub_dependencyr   is_founddetect)selfr?   r0   r@   sysroot	__class__s        r/   rJ   zGTestDependencySystem.__init__8   s    {FUCCCJJvu--	()9:GGIIOR #77Cg9gh''TEUWY(Z(Z[[ 	!DMFr.   c                   | j                             d| j        g           }| j                             d| j        g           }|rE| j        r|r<d| _        g | _        || _        | j        r| xj        |z  c_        g | _        d| _        d S | 	                                rUd| _        d | j
        D             | _        g | _        | j        r| j        | j        g| _        n| j        g| _        d| _        d S d| _        d S )Ngtest
gtest_mainTc                    g | ]}d |z   S -Ir-   ).0ds     r/   
<listcomp>z0GTestDependencySystem.detect.<locals>.<listcomp>P   s     I I Ia I I Ir.   F)clib_compilerfind_libraryenvrG   rP   compile_args	link_argssourcesprebuiltdetect_srcdirsrc_include_dirsall_srcmain_src)rR   gtest_detectgtest_main_detects      r/   rQ   zGTestDependencySystem.detectC   s   )66w"MM .;;L$(TVWW 	" 	".? 	" DM "D)DNy 4"33DL DMMM!! 
	" DM I I43H I I IDDNy . $dm< $~!DMMM!DMMMr.   boolc                   | j         D ]D}t          j                            |          r!|| _        t
          j                            t          j                            | j        d                    | _	        t
          j                            t          j                            | j        d                    | _
        t          j                            t          j                            | j        d                    t          j                            t          j                            | j        d                    g| _         dS FdS )Nzgtest-all.cczgtest_main.cc..z
../includeTF)rN   ospathexistssrc_dirr   Filefrom_absolute_filejoinrg   rh   normpathrf   )rR   ss     r/   re   z#GTestDependencySystem.detect_srcdirZ   s     
	 
	Aw~~a   	 '}??GLL~>> @  @ ( @ @GLL??!A !A)+)9)9"',,t|UY:Z:Z)[)[)+)9)9"',,t|Ua:b:b)c)c)+% tt	 ur.   c                    | j         rdS dS Nrd   zbuilding selfrd   rR   s    r/   log_infozGTestDependencySystem.log_infoh       = 	#:"?r.   r?   r4   r0   r1   r@   rA   r3   rB   r3   rB   )r3   rk   r3   r4   )r)   r*   r+   rJ   rQ   re   r{   __classcell__rT   s   @r/   r>   r>   7   sy        	 	 	 	 	 	" " " ".   # # # # # # # #r.   r>   c                        e Zd Zd fdZ xZS )	GTestDependencyPCr?   r4   r0   r1   r@   rA   c                    |dk    sJ |                     d          rd}t                                          |||           d S )NrV   rG   rW   rK   rI   rJ   rR   r?   r0   r@   rT   s       r/   rJ   zGTestDependencyPC.__init__q   K    w::f 	 D{F33333r.   r?   r4   r0   r1   r@   rA   r)   r*   r+   rJ   r   r   s   @r/   r   r   o   =        4 4 4 4 4 4 4 4 4 4r.   r   c                  (     e Zd Zd fd	Zdd
Z xZS )GMockDependencySystemr?   r4   r0   r1   r@   rA   r3   rB   c           
     R   t                                          |||d           |                    dd          | _        |                     t          || j        i                     s	d| _        d S |                                }| j        rd|d<   |                     t          || j        |                    }|s	d| _        d S | j
                            d| j        g           }| j
                            d| j        g           }|r@| j        r|r7d| _        | xj        |z  c_        | j        r| xj        |z  c_        d| _        d S dD ]P}t          j                            |          r-d| _        t          j                            t          j                            |d	                    }	| xj        d
|z   d
|	z   d
t          j                            |	d          z   gz  c_        t*          j                            t          j                            |d                    }
t*          j                            t          j                            |d                    }| j        r| xj        |
|gz  c_        n| xj        |
gz  c_        d| _         d S Rd| _        d S )NrD   rE   rG   Fgmock
gmock_mainT)z"/usr/src/googletest/googlemock/srcz/usr/src/gmock/srcz/usr/src/gmockrm   rZ   includezgmock-all.cczgmock_main.cc)rI   rJ   rK   rG   rO   r   r2   rP   copygtest_factoryr^   r_   r`   rb   rd   rn   ro   rp   ru   rt   ra   r   rr   rs   rc   )rR   r?   r0   r@   gtest_kwargsfoundgmock_detectgmock_main_detectr\   d2rg   rh   rT   s               r/   rJ   zGMockDependencySystem.__init__y   s   {FUCCCJJvu--	''TEUWY(Z(Z[[ 	!DMF {{}}9 	)#(L 
 (({DDTVb)c)cdd 	!DMF )66w"MM .;;L$(TVWW 	 	.? 	 DMNNl*NNy 4"33 DMF_ 	 	Aw~~a    $ W%%bgll1d&;&;<<!!dQhr	4"',,rS\B]B];]%^^!!"-::27<<>;Z;Z[[#=;;BGLLO<\<\]]9 .LLWh$77LLLLLWI-LL % r.   c                    | j         rdS dS rx   ry   rz   s    r/   r{   zGMockDependencySystem.log_info   r|   r.   r}   r   )r)   r*   r+   rJ   r{   r   r   s   @r/   r   r   x   sR        1 1 1 1 1 1f# # # # # # # #r.   r   c                        e Zd Zd fdZ xZS )	GMockDependencyPCr?   r4   r0   r1   r@   rA   c                    |dk    sJ |                     d          rd}t                                          |||           d S )Nr   rG   r   r   r   s       r/   rJ   zGMockDependencyPC.__init__   r   r.   r   r   r   s   @r/   r   r      r   r.   r   c                  `     e Zd ZdZdZdhZd fd
ZddZddZddZ	ddZ
dd dZd!dZ xZS )"LLVMDependencyConfigToolz
    LLVM uses a special tool, llvm-config, which has arguments for getting
    c args, cxx args, and ldargs as well as version.
    llvm-configz-DNDEBUGr?   r4   r0   r1   r@   rA   c                   t          d          | _        |j        |                     |                   j        r| j                            d           n| j                            d           t                                          |||d           g | _        t          j
                    | _        g | _        | j        sd S |                     dgd          | _        t          t!          |d                    }|                     |           t          t!          |d                    }|                     |d	
           t          j
        |                     dgd                    }t%          |                    | j                            | _        t-          || j        | j                  | _        t1          | j        d          r|                     |           n|                                  t9          || j        | j                  | _        |                     | j                  | _        |                     tA          || j        i                     s	d	| _        d S d S )Nr   zllvm-config-64zllvm-config-32rD   rE   z--componentsr&   optional_modulesF)requiredz
--cppflagsra   z>= 3.9)!r   toolsr8   get_for_machine_from_kwargs	is_64_bitappendrI   rJ   provided_modulesr   
OrderedSetrequired_modulesmodule_detailsrP   get_config_valuer   r   check_componentslist
difference(_LLVMDependencyConfigTool__cpp_blacklistra   r   r2   r	   r(   _set_new_link_args_set_old_link_argsr   rb   ._LLVMDependencyConfigTool__fix_bogus_link_argsrO   r   )rR   r?   r0   r@   r&   opt_modulescargsrT   s          r/   rJ   z!LLVMDependencyConfigTool.__init__   s6   (77
  @ @ H HIS 	0J.////J./// 	{FUCCC-/:B:M:O:O-/} 	F $ 5 5~6F	 R R	 B BCCg&&&#OF<N$O$OPPkE:::#D$9$9<..$Y$YZZ !1!1$2F!G!GHH4[$BRTXTeff4<22 	&##K0000##%%%-k4;KT^\\33DNCC''TEUWY(Z(Z[[ 	!DMF	 	r.   argsr%   r3   c                   g }|D ]}|                     d          r>|                    d          r)|                    |                    d                     U|                     d          r^| j        j        j        | j                 d         }|                    |	                    |                    d                               |                    |           |S )a  This function attempts to fix bogus link arguments that llvm-config
        generates.

        Currently it works around the following:
            - FreeBSD: when statically linking -l/usr/lib/libexecinfo.so will
              be generated, strip the -l in cases like this.
            - Windows: We may get -LIBPATH:... which is later interpreted as
              "-L IBPATH:...", if we're using an msvc like compilers convert
              that to "/LIBPATH", otherwise to "-L ..."
        -lr7   z	-LIBPATH:rD   )

startswithendswithr   lstripr`   coredata	compilersr2   extendget_linker_search_args)rR   r   new_argsargrD   s        r/   __fix_bogus_link_argsz.LLVMDependencyConfigTool.__fix_bogus_link_args   s      	% 	%C~~d## %U(;(; %

4 0 01111,, %h'1$2BCEJ : :3::k;R;R S STTTT$$$$r.   sharedrk   rB   c                    |rdnd}| j         }d| _         	 |                     d|gd          | _        || _         dS # || _         w xY w)z9Use llvm-config's --libfiles to check if libraries exist.--link-shared--link-staticTz
--libfilesrH   N)r   r   rb   )rR   r   moderestores       r/   __check_libfilesz)LLVMDependencyConfigTool.__check_libfiles  sa    "(=o -	$ "22L$3GLLDN#DMMMGDM####s	   < 	Ac           
     4   	 |                      dgd          d         }n,# t          $ r t          j        d           d| _        Y dS w xY w| j        s=|dk    r6	 |                     d           nb# t          $ r t          || j	                  }|                      d	gd          d         }t          t          j        t          j                            |d
|                               }|s| j        r d| _        Y dS |                      dgd          | _        t          j                            |d                                       |                              d          }| j                            d|            Y dS w xY w| j        r=|dk    r7	 |                     d           n # t          $ r | j        r d| _        Y dS w xY w| j        rddgndg}|                      ddg|z   t-          | j                  z   d          | _        dS )z/How to set linker args for LLVM versions >= 3.9z--shared-moderb   r   z+llvm-config --shared-mode returned an errorFNstaticT--libdirzlibLLVM*	--ldflagslibr   r   r   --system-libsr   --libs)r   
IndexErrorr   debugrP   r   )_LLVMDependencyConfigTool__check_libfilesr   r<   r2   sortedglobiglobrn   ro   rt   r   rb   basenamerstripr   r   r   r   )rR   r0   r   lib_extlibdirmatcheslibnamerb   s           r/   r   z+LLVMDependencyConfigTool._set_new_link_args  s]   	((/):KHHKDD 	 	 	JDEEE!DMFF	
 { '	tx//%%d++++&   3KAQRR..
|[II!L BGLLAUGAUAU,V,V!W!WXX } $)DMFF!%!6!6}k!R!R'**71:66==gFFMMeTT%%n7nn555 [ 	TX--
%%e,,,,&   =  %	 ;?+\_o66OK\	..{#i/$t7L2M2MM s;     %A	A	A3 3BFBFFF5 5GGc           	        | j         r4|                     g dt          | j                  z   d          | _        dS |                     dgd          d         }d| j         }t          j        | d          }t          j	        |          D ]o}|
                    |          rXd| d                    t          j                            |                    d	                    d                   g| _         dS pt          d
          )a9  Setting linker args for older versions of llvm.

        Old versions of LLVM bring an extra level of insanity with them.
        llvm-config will provide the correct arguments for static linking, but
        not for shared-linking, we have to figure those out ourselves, because
        of course we do.
        )r   r   r   rb   r   r   zlibLLVM-z.(so|dll|dylib)$z-Lz-l{}r   z7Could not find a dynamically linkable library for LLVM.N)r   r   r   r   rb   r(   recompilern   listdirmatchformatro   splitextr   r   )rR   r   expected_namere_namefile_s        r/   r   z+LLVMDependencyConfigTool._set_old_link_argsK  s%    ; 	O!228884@U;V;VV DNNN **J<EEaHF5t|55Mj]!D!D!DEEGF++ O O=='' &36mm&,mmBG4D4DU\\RWEXEX4Y4YZ[4\&]&]&_DNEE
 *MO O Or.   Tr&   r   c                   t          t          |                    D ]l}d}|| j        vr(|r#d| _        | j        rt          d|           d}nd}n| j                            |           | j        	                    ||z              mdS )zCheck for llvm components (modules in meson terms).

        The required option is whether the module is required, not whether LLVM
        is required.
        rH   Fz(Could not find required LLVM Component: z	(missing)z(missing but optional)N)
r   setr   rP   r   r   r   addr   r   )rR   r&   r   modstatuss        r/   r   z)LLVMDependencyConfigTool.check_componentsj  s     #g,,'' 	5 	5CF$/// 6$)DM} N1LsLLN N N(FF5FF%))#...&&sV|4444	5 	5r.   c                N    | j         rdd                    | j                   z   S dS )Nz	modules: , rH   )r   rt   rz   s    r/   log_detailsz$LLVMDependencyConfigTool.log_details  s-     	@4+>!?!???rr.   r   )r   r%   r3   r%   )r   rk   r3   rB   )r0   r1   r3   rB   r~   )T)r&   r%   r   rk   r3   rB   r   )r)   r*   r+   __doc__	tool_namer   rJ   r   r   r   r   r   r   r   r   s   @r/   r   r      s          I!lO' ' ' ' ' 'R   .$ $ $ $ 5 5 5 5nO O O O>5 5 5 5 5.       r.   r   c                  H     e Zd Zd fd	Zdd
ZddZddZddZddZ xZ	S )LLVMDependencyCMaker?   r4   r`   r1   r@   rA   r3   rB   c                L    t          t          |d                     _        t          t          |d                     _        d }|                    dd          r|j        j        j        }n|j        j        j        }|rddh	                    |          s&t          j         t          d          ||           g  _        | _        g }|sddg}n2d|vr|                    d           d|vr|                    d           t!          j        dd	t%          |          d
k    rdnddd                    d |D                                           dd          d j         dd                    d                    d |D                        j        t.          j        j        u rdnd          dd
  
         d S t5                                          |||dd            j                                        sd S  j        sd S  j        s2t?           j         d          r j        rt!          j        d           d S  j!        "                    d          } j!        "                    d           }t%          |          d
k    r|d!         #                    d"          }d# |D             |z   } xj$         fd$|D             z  c_$        tK          | j         j$                   _$         &                    tO          | j        i                     s	d _        d S d S )%Nr&   r   nativeFcrD   cmakezDThe LLVM dependency was not found via CMake, as this method requiresz,both a C and C++ compiler to be enabled, butr   onlyneitheraz nor c              3  >   K   | ]}|                                 V  d S N)upperr[   ls     r/   	<genexpr>z/LLVMDependencyCMake.__init__.<locals>.<genexpr>  s*      661QWWYY666666r.   CPPzC++zcompiler is enabled for the.zVConsider adding "{0}" to your project() call or using add_languages({0}, native : {1})r   c              3  "   K   | ]
}d | d V  dS )'Nr-   r   s     r/   r   z/LLVMDependencyCMake.__init__.<locals>.<genexpr>  s*      661h!hhh666666r.   truefalsez"before the LLVM dependency lookup.fatalT)rF   force_use_global_compilersz< 7.0zcBefore version 7.0 cmake does not export modules for dynamic linking, cannot check required modulesPACKAGE_INCLUDE_DIRSPACKAGE_DEFINITIONSr    c                    g | ]}d |z   S rY   r-   )r[   xs     r/   r]   z0LLVMDependencyCMake.__init__.<locals>.<listcomp>  s    +++Qq+++r.   c                &    g | ]}|j         v|S r-   )ra   )r[   r  rR   s     r/   r]   z0LLVMDependencyCMake.__init__.<locals>.<listcomp>  s&    LLLA$:K1K1Ka1K1K1Kr.   )(r   r   llvm_modulesllvm_opt_modulesrK   r   r   buildhostissubsetr   rJ   r   found_modulesr?   r   r   warninglenrt   replacer2   r   r   r    BUILDrI   cmakebinr   rP   r   r	   r(   traceparserget_cmake_varsplitra   r   rO   r   )
rR   r?   r`   r@   r   langsinc_dirsdefstemprT   s
   `        r/   rJ   zLLVMDependencyCMake.__init__  s^   )/&)*L*LMM -ofFX.Y.Y Z Z	::h&& 	4.4II.3I  	e 5 5i @ @  	'.@.I.I3PVWWW /1DDI!#E (ei''LL%%%	))LL'''LV>e**//y6666666>>ueLL-#&&&hooII6666666".(2H2NNNFFT[  5    FsFUW[\\\}""$$ 	F} 	F { 	t|WEE 	$J[ 	L~F #112HII--.CDDt99>>7==%%D++(+++d2LLLLLLLL4S$:JDL]^^''T=Mr(R(RSS 	!DMF	 	r.   c                    dS )NzCMakeListsLLVM.txtr-   rz   s    r/   _main_cmake_filez$LLVMDependencyCMake._main_cmake_file  s    ##r.   r%   c                     dddd}fd	t          d
          D             } j        r fdt          d
          D             }t          |t          j        |                    S )Nreqr4   r3   c                L    t          |                     d          dz             S )N-z.0)r   strip)r"  s    r/   ver_from_sufz=LLVMDependencyCMake.llvm_cmake_versions.<locals>.ver_from_suf  s    !#))C.."5666r.   r   bintc                Z    t          | d|z             rdS t          | d|z             rdS dS )N=r   <r   r	   )r   r'  s     r/   version_sorterz?LLVMDependencyCMake.llvm_cmake_versions.<locals>.version_sorter  s=    q#a%(( qq#a%(( q2r.   c                X    g | ]&}t           |          d            |          'S )z>=0r-  )r[   r  r&  s     r/   r]   z;LLVMDependencyCMake.llvm_cmake_versions.<locals>.<listcomp>  s?    """qWfgsgstugvgvx}W~W~"<<??"""r.   rH   c                b    g | ]+}t           |          j                    |          ,S r-   )r
   version_reqs)r[   r  rR   r&  s     r/   r]   z;LLVMDependencyCMake.llvm_cmake_versions.<locals>.<listcomp>  sg      'U  'U  'U1[op|p|}~pp  BF  BS  \T  \T  'U||A  'U  'U  'Ur.   )key)r"  r4   r3   r4   )r   r4   r'  r4   r3   r(  )r   r1  r   	functools
cmp_to_key)rR   r.  llvm_requested_versionsr&  s   `  @r/   llvm_cmake_versionsz'LLVMDependencyCMake.llvm_cmake_versions  s    	7 	7 	7 	7	 	 	 	 #@"""<OPR<S<S""" 	U 'U  'U  'U  'U  'U@STV@W@W  'U  'U  'U#-93G3W3WXXXXr.   c           	        d                     d                    | j                            d                     d                    | j                            d                     d                    t	          | j                                      d                     d                    |                                                     d                     | j        rdnd          gS )	Nz -DLLVM_MESON_REQUIRED_MODULES={};z -DLLVM_MESON_OPTIONAL_MODULES={}z-DLLVM_MESON_PACKAGE_NAMES={}z-DLLVM_MESON_VERSIONS={}z-DLLVM_MESON_DYLIB={}OFFON)r   rt   r  r  r   r?   r6  r   rz   s    r/   _extra_cmake_optsz%LLVMDependencyCMake._extra_cmake_opts  s    299#((4CT:U:UVV299#((4CX:Y:YZZ/66sxx@STXT]@^@^7_7_``*11#((4;S;S;U;U2V2VWW'../MuuNN	P 	Pr.   r&   T.List[T.Tuple[str, bool]]
componentsc                    g }|D ]w\  }}| j                             d|           }|sF|r|                     d| d          t          j        dt          j        |          dd           j|D ]
}|||fgz  }x|S )NMESON_LLVM_TARGETS_zLLVM module z was not foundzOptional LLVM modulezwas not foundFr  )r  r  _gen_exceptionr   r  bold)rR   r&   r=  resr   r   
cm_targetsis           r/   _map_module_listz$LLVMDependencyCMake._map_module_list  s    $ 		' 		'MC)778Sc8S8STTJ  --.PS.P.P.PQQQL!73`effff ' 'H&'
r.   modulec                T    | j                             d|           }|r|d         S |S )NMESON_TARGET_TO_LLVM_r   )r  r  )rR   rF  	orig_names      r/   _original_module_namez)LLVMDependencyCMake._original_module_name  s8    $223S63S3STT	 	 Q<r.   )r?   r4   r`   r1   r@   rA   r3   rB   r   )r3   r%   )r&   r<  r=  r<  r3   r<  )rF  r4   r3   r4   )
r)   r*   r+   rJ   r   r6  r;  rE  rJ  r   r   s   @r/   r   r     s        C C C C C CJ$ $ $ $Y Y Y Y&P P P P          r.   r   c                  .     e Zd ZdZd fdZdddZ xZS )ValgrindDependencyzy
    Consumers of Valgrind usually only need the compile args and do not want to
    link to its (static) libraries.
    r`   r1   r@   rA   c                N    t                                          d||           d S )Nvalgrind)rI   rJ   )rR   r`   r@   rT   s      r/   rJ   zValgrindDependency.__init__  s%    S&11111r.   NFrF   r'   rawrk   r3   r%   c                    g S r   r-   )rR   rF   rO  s      r/   get_link_argsz ValgrindDependency.get_link_args	  s    	r.   )r`   r1   r@   rA   )NF)rF   r'   rO  rk   r3   r%   )r)   r*   r+   r   rJ   rQ  r   r   s   @r/   rL  rL    s`         2 2 2 2 2 2        r.   rL  rN  c                        e Zd Zd fdZ xZS )	ZlibSystemDependencyr?   r4   r0   r1   r@   rA   c                   t                                          |||           ddlm} ddlm} | j        j        | j                 }|	                                rt          | j        ||f          s<|                                s(|                                s|                                rd| _        dg| _        n| j                                        dk    rddg}nd	g}|D ]]}| j                            ||g | j                  }	| j                            d
d|| g          }
|	r|
d         rd| _        |	| _         n^d S | j                            dd| j        g | g          \  }}|                    d          | _        d S )Nr   )AppleClangCCompiler)AppleClangCPPCompilerTz-lzmsvczlib1zlibzzzlib.hrH   )dependenciesr   ZLIB_VERSIONz#include <zlib.h>")rI   rJ   compilers.crU  compilers.cpprV  r`   r8   r2   r:   
isinstancer^   
is_freebsdis_dragonflybsd
is_androidrP   rb   get_argument_syntaxr_   libtype
has_header
get_definer%  r(   )rR   r?   r0   r@   rU  rV  r;   libsr   r   hv_rT   s                r/   rJ   zZlibSystemDependency.__init__  s   {F333555555999999Hd./ [[]] 	z$*<?RTi>jkk 		"#"3"3"5"5	9:	 !DM#WDNN!55776AA(u  &33Cb$,WW&11(B[_Z`1aa 1 $(DM%&DNE!,,^=PRVRZ\^ae`fgg1wws||r.   r   r   r   s   @r/   rS  rS    s=        !$ !$ !$ !$ !$ !$ !$ !$ !$ !$r.   rS  c                  P     e Zd Zd fdZedd	            Zedd            Z xZS )JNISystemDependencyr0   r1   r@   r$   c                x	   t                                          d|t          j        d|                     d| _        | j        j        | j                 }d|j        j	        | j                 vrt          | j        || j        d           |j        j	        | j                 d         | _        | j        j        | _        t          j        |                    dg                     }|D ]F}|dvr@d| d}| j        rt%          j        |           nt%          j        |           d	| _         d S Gd
|v rOt-          | j        |d
                   d         s.t%          j        d| j         d|d
                     d	| _        d S |j        | j                                                 | _        | j        sFt5          j        t9          j        | j                                                                                            j         d         | _        |!                                rt5          j        d          }|| j        j         v rtE          j#        ddd|j$        gtD          j%                  }|j&        dk    r;d}| j        rt%          j        |           nt%          j        |           d	| _        d S t5          j        |j'        (                                )                                          | _        | *                    |          }	|	t%          j        d           d	| _        d S | j        dz  }
| j+        ,                    d|
            | j+        ,                    d|
|	z              |r<|-                                r| j        dz  }|}nMt]          | j        d          r)| j        dz  dz  | /                    |j$                  z  }n
| j        dz  }|dz  }d|v rc| j0        1                    d|te          |          g          }|t%          j        d           d	| _        n| j3        4                    |           d|v rc| j0        1                    d |te          |          g          }|t%          j        d!           d	| _        n| j3        4                    |           d"| _        d S )#NjnirA   )0.62.0rH   javar&   >   awtjvmzUnknown JNI module ()Fr(   r   zIncorrect JDK version found (z
), wanted r   z4/System/Library/Frameworks/JavaVM.framework/Versionsz/usr/libexec/java_homez
--failfastz--arch)stdoutzJJAVA_HOME could not be discovered on the system. Please set it explicitly.zlCould not find a JDK platform include directory for your OS, please open an issue or provide a pull request.r   rZ   r   z<= 1.8.0jreserverrs  )
extra_dirszjvm library not found.rr  jawtzjawt library not found.T)5rI   rJ   Tcastfeature_sincer`   r8   r2   r   r   r   r?   javacr(   r   listifyrK   r   r   errorr   rP   r
   rL   get_java_home	java_homepathlibPathshutilwhichget_exeresolveparentsr:   
subprocessrun
cpu_familyPIPE
returncoderu  decoder%  :_JNISystemDependency__machine_info_to_platform_include_dirra   r   r9   r	   #_JNISystemDependency__cpu_translater^   r_   r4   rb   r   )rR   r0   r@   r;   r&   rF  msgproblem_java_prefixrB  platform_include_dirjava_home_includejava_home_libjava_home_lib_serverrs  ry  rT   s                  r/   rJ   zJNISystemDependency.__init__6  s   QV4H&-Q-QRRR+Hd./-78HIIIDI{D4DfMMM )3D4DEfM
z)'/

9b0I0IJJ 	 	F^++6V666= $JsOOOOJsOOO % , ';DL&QZJ['\'\]^'_Jbt|bbvV_O`bbccc!DMF$/0@AOOQQ~ 	O$\&,tz7I7I7K7K*L*LMMUUWW_`abDN{{}} O&-l3i&j&j#&$.*@@@$.*BLRZ\]\h)i0:A A AC~**j= , JsOOOO JsOOO(-%,\#*2C2C2E2E2K2K2M2M%N%NDN#JJ1MM'J  F  G  G  G!DMF NY6  !9&7!9!9:::  !P&7:N&N!P!PQQQ 	0||~~ 	@ $ 6'4$$"4<<< ;$(NU$:U$BTEYEYZ[ZfEgEg$gMM$(NU$:M'4x'?$(55e[VYZnVoVoUp5qq;J7888$)DMMN))#...)66v{X[\iXjXjWk6ll<J8999$)DMMN))$///r.   cpur4   r3   c                6    ddi}|                     | |           S )z
        The JDK and Meson have a disagreement here, so translate it over. In the event more
        translation needs to be done, add to following dict.
        x86_64amd64)rK   )r  	java_cpuss     r/   __cpu_translatez#JNISystemDependency.__cpu_translate  s&     g
	 }}S#&&&r.   r;   'MachineInfo'r'   c                f   |                                  rdS |                                 rdS |                                 rdS |                                 rdS |                                 rdS |                                 rdS |                                 rdS |                                 rdS d	S )
aA  Translates the machine information to the platform-dependent include directory

        When inspecting a JDK release tarball or $JAVA_HOME, inside the `include/` directory is a
        platform-dependent directory that must be on the target's include path in addition to the
        parent `include/` directory.
        linuxwin32darwinsolarisfreebsdnetbsdopenbsd	dragonflyN)is_linuxr9   r:   is_sunosra  	is_netbsd
is_openbsdrb  )r;   s    r/   &__machine_info_to_platform_include_dirz:JNISystemDependency.__machine_info_to_platform_include_dir  s     ::<< 	7\\^^ 	7[[]] 	8ZZ\\ 		9\\^^ 	9[[]] 	8\\^^ 	9   	;tr.   r0   r1   r@   r$   )r  r4   r3   r4   )r;   r  r3   r'   )r)   r*   r+   rJ   staticmethodr  r  r   r   s   @r/   rm  rm  5  s        S S S S S Sj 	' 	' 	' \	'    \    r.   rm  ro  c                        e Zd Zd fdZ xZS )JDKSystemDependencyr0   r1   r@   r$   c                    t                                          ||           d| _        | j                            t          ddd                     d S )N)z0.59.0rH   zjdk system dependencyrp  z%Use the jni system dependency instead)rI   rJ   r|  featurechecksr   r   )rR   r0   r@   rT   s      r/   rJ   zJDKSystemDependency.__init__  s`    f---+!!"3#3#
 #
 	 	 	 	 	r.   r  r   r   s   @r/   r  r    s=                 r.   r  jdkc                  Z     e Zd ZddZedd            Zd  fdZddddddddd!dZ xZS )"DiaSDKSystemDependencydiadirr4   r  r3   rk   c                   t           j                            |          sdS t           j                            |d          }t           j                            |          st	          j        d|           dS t           j                            |d|d          }t           j                            |          st	          j        d|           dS t           j                            |d|          }t           j                            |          st	          j        d| d	           dS t          j        t           j                            |d
                    }|st	          j        d|z              dS t          |          dk    rt	          j        d|z              dS |d         | _	        t           j        
                    | j	                  }|t          d          t          d                    }|d         dk    r|d d         | _        nt	          j        d| d           d| _        | j                            d|z              | j                            |           d| _        dS )NFr   z%DIA SDK is missing include directory:r   zdiaguids.libzDIA SDK is missing library:binz
Directory z
 not foundz
msdia*.dllzCan't find msdia*.dll in r   z#Multiple msdia*.dll files found in r   msdiar6   r,  0z&Unexpected DIA SDK version string in 'r  unknownrZ   T)rn   ro   isdirrt   r   r  rp   r   r  dllr   r(   ra   r   rb   rP   )	rR   r  r  r   r   bindirr   dllname
versionstrs	            r/   	_try_pathz DiaSDKSystemDependency._try_path  s"   w}}V$$ 	5',,vy11w}}W%% 	J>HHH5gll65#~>>w~~c"" 	J4c:::5feS11w~~f%% 	J6F6667775	"',,v|<<== 	J2V;<<<5u::>>J<vEFFF58 '""48,,S\\3v;;,67
b>S  %crc?DLLJJJJJKKK$DL  000c"""tr.   compiler
'Compiler'dnamer`   r1   c                B    |                      |d|g g           \  }}|d uS )NrH   )rg  )r  r  r`   defvalrk  s        r/   _has_definez"DiaSDKSystemDependency._has_define  s,    ''r3B??	T!!r.   r0   r@   rA   rB   c                   t                                          d||           d| _        |j        j        j        }d|v r	|d         }nd|v r	|d         }nt          d          |j        dk    o|                     |d|          }|j        dvr|st          d	          d
dddd}|j	        j        j
        }|                    |          }|t          d| d          t          j                            d          }	|	t          d          t          j                            |	d          }
|                     |
|          rt#          j        d|
           d| _        d S t#          j        d|
           d S )NdiasdkFrD   r   z/DIA SDK is only supported in C and C++ projectsclang_MSC_VER>   clang-clrW  z@DIA SDK is only supported with Microsoft Visual Studio compilersarmarm64r   r  )r  aarch64x86r  zDIA SDK is not supported for "z" architectureVSInstallDirzAEnvironment variable VSInstallDir required for DIA SDK is not setzDIA SDKz#DIA SDK was found at default path: Tz'DIA SDK was not found at default path: )rI   rJ   rP   r   r   r  r   idr  r8   r  rK   rn   environro   rt   r  r   r   )rR   r0   r@   r   r  is_msvc_clangcpu_translater  r  vsdirr  rT   s              r/   rJ   zDiaSDKSystemDependency.__init__  s   ;777(27	I 'HHI ~HH%&WXXX w.f43C3CHjZe3f3f;222=2%&hiii %'#QXYY ).9

++;%&az&a&a&abbb
~..=%&ijjjeY//>>&#&& 	J<fEEE DMF
<fEEEr.   N)r   	pkgconfig
configtoolinternalsystemdefault_valuepkgconfig_definer   r'   r  r  r  r  r  r  r"   c               V    |dk    r| j         r| j        S ||S t          d|           )Nr  z9Could not get system variable and no default was set for )rP   r  r   )rR   r   r  r  r  r  r  r  s           r/   get_variablez#DiaSDKSystemDependency.get_variable  s>     U??t}?8O$  !"f^b"f"fgggr.   )r  r4   r  r4   r3   rk   )r  r  r  r4   r`   r1   r3   rk   )r0   r1   r@   rA   r3   rB   )r   r'   r  r'   r  r'   r  r'   r  r'   r  r'   r  r"   r3   r4   )	r)   r*   r+   r  r  r  rJ   r  r   r   s   @r/   r  r    s        + + + +\ " " " \"! ! ! ! ! !F 8<Z^37UY/3VZ=Ah h h h h h h h h hr.   r  r  LLVM)cmake_classconfigtool_classllvmrV   )pkgconfig_classsystem_classr   rY  ZLIB)
cmake_namer  )r0   r1   r2   r    r3   r4   )L
__future__r   r   rn   r   r  r  r  typingrz  r3  %mesonbuild.interpreterbase.decoratorsr   rH   r   r   r0   r   r	   r
   r   r   r   baser   r   r   r   r   r   r   r   r   r   r  r   rQ   r   factoryr   miscr   r  r   TYPE_CHECKING	envconfigr   r   r   r   r    typing_extensionsr!   interpreter.type_checkingr"   r$   r<   r>   r   r   r   r   r   rL  rS  rm  r  r  CMAKECONFIG_TOOLllvm_factory	PKGCONFIGSYSTEMr   gmock_factoryzlib_factoryr-   r.   r/   <module>r     s   # " " " " "  				 				               C C C C C C         - - - - - - l l l l l l l l l l l l l l t  t  t  t  t  t  t  t  t  t  t  t  t  t  t  t  t  t  t  t " " " " " " , , , , , ,       & & & & & & ! ! ! ! ! ! * * * * * *? !''''''))))))$$$$$$((((((++++++??????! ! ! ! !	 ! ! !	 	 	 	5# 5# 5# 5# 5#, 5# 5# 5#p4 4 4 4 4+ 4 4 48# 8# 8# 8# 8#, 8# 8# 8#v4 4 4 4 4+ 4 4 4H H H H H3 H H HTx x x x x/ x x xv	 	 	 	 	, 	 	 	 * #$ #$ #$ #$ #$+ #$ #$ #$L{ { { { {* { { {z &	 	 	 	 	- 	 	 	 &`h `h `h `h `h- `h `h `hD , "3"3
/;<#-	# # #  < %6$5 "3":;%&	% % %  M %6$5 "3":;%&	% % %  M #4"3
 "3"9;L;ST%	# # #  <<<r.   