
    e8v                       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	jX                  r#ddl-m.Z. ddlm/Z/ ddlm0Z0 d dl1m2Z2  G d de2      Z3d7dZ4 G d de      Z5 G d de+      Z6 G d de      Z7 G d de+      Z8 G d d e#      Z9 G d! d"e!      Z: G d# d$e+      Z;e;e%d%<    G d& d'e      Z< G d( d)e      Z=e=e%d*<    G d+ d,e=      Z>e>e%d-<    e'd.ej~                  ej                  ge:e9/      xe%d0<   ZA e'd1ej                  ej                  ge6e52      xe%d1<   ZD e'd3ej                  ej                  ge8e72      xe%d3<   ZE e'd4ej                  ej~                  ej                  gd5e<6      xe%d4<   ZFy)8    )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)MachineChoice)	TypedDictc                  "    e Zd ZU ded<   ded<   y)JNISystemDependencyKWT.List[str]modulesT.Optional[str]versionN)__name__
__module____qualname____annotations__     =/usr/lib/python3/dist-packages/mesonbuild/dependencies/dev.pyr"   r"   0   s     ! r,   r"   c                f    | j                   |   }|j                         ry|j                         ryy)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
    z.dllz.dylib.so)machines
is_windows	is_darwin)environmentfor_machinems      r-   get_shared_library_suffixr6   7   s/     	[)A||~	
r,   c                  8     e Zd Zd fdZddZddZddZ xZS )	GTestDependencySystemc                    t         |   |||d       |j                  dd      | _        ddg| _        | j                  t        || j                  i             sd| _        y | j                          y )NcpplanguagemainFz/usr/src/gtest/srcz"/usr/src/googletest/googletest/src)
super__init__getr=   src_dirs_add_sub_dependencyr   r4   is_founddetectselfnamer3   kwargs	__class__s       r-   r?   zGTestDependencySystem.__init__D   si    {FUCJJvu-	-/ST''TEUEUWY(Z[!DMr,   c                x   | j                   j                  d| j                  g       }| j                   j                  d| j                  g       }|rS| j                  r|rEd| _        g | _        || _        | j                  r| xj                  |z  c_        g | _        d| _        y | j                         r{d| _        | j                  D cg c]  }d|z   	 c}| _        g | _        | j                  r%| j                  | j                  g| _        d| _        y | j                  g| _        d| _        y d| _        y c c}w )Ngtest
gtest_mainT-IF)clib_compilerfind_libraryenvr=   rC   compile_args	link_argssourcesprebuiltdetect_srcdirsrc_include_dirsall_srcmain_src)rF   gtest_detectgtest_main_detectds       r-   rD   zGTestDependencySystem.detectM   s   ))66w"M ..;;L$((TVW.? DM "D)DNyy"33DL DM! DM373H3H Ia IDDNyy $dmm< "DM !%~!DM!DM !Js   	D7c                   | j                   D ]U  }t        j                  j                  |      s$|| _        t
        j                  j                  t        j                  j                  | j                  d            | _	        t
        j                  j                  t        j                  j                  | j                  d            | _
        t        j                  j                  t        j                  j                  | j                  d            t        j                  j                  t        j                  j                  | j                  d            g| _         y y)Nzgtest-all.cczgtest_main.cc..z
../includeTF)rA   ospathexistssrc_dirr   Filefrom_absolute_filejoinrW   rX   normpathrV   )rF   ss     r-   rU   z#GTestDependencySystem.detect_srcdird   s     
	Aww~~a  '}}??GGLL~> @ ( @ @GGLL?!A)+)9)9"'',,t||UY:Z)[)+)9)9"'',,t||Ua:b)c)+% 
	 r,   c                    | j                   ryyNrT   zbuilding selfrT   rF   s    r-   log_infozGTestDependencySystem.log_infor       =="r,   rG   strr3   'Environment'rH   T.Dict[str, T.Any]returnNonerq   rr   )rq   boolrq   rn   )r'   r(   r)   r?   rD   rU   rk   __classcell__rI   s   @r-   r8   r8   C   s    ".#r,   r8   c                        e Zd Zd fdZ xZS )GTestDependencyPCc                \    |dk(  sJ |j                  d      rd}t        | 	  |||       y )NrK   r=   rL   r@   r>   r?   rE   s       r-   r?   zGTestDependencyPC.__init__{   1    w::fD{F3r,   rG   rn   r3   ro   rH   rp   r'   r(   r)   r?   rv   rw   s   @r-   ry   ry   y       4 4r,   ry   c                  (     e Zd Zd fdZddZ xZS )GMockDependencySystemc           
     z   t         |   |||d       |j                  dd      | _        | j	                  t        || j                  i             sd| _        y |j                         }| j                  rd|d<   | j	                  t        || j                  |            }|sd| _        y | j                  j                  d| j                  g       }| j                  j                  d| j                  g       }|rS| j                  r|rEd| _        | xj                  |z  c_        | j                  r| xj                  |z  c_        d| _        y dD ]a  }t        j                   j#                  |      s$d| _        t        j                   j%                  t        j                   j'                  |d	            }	| xj(                  d
|z   d
|	z   d
t        j                   j'                  |	d      z   gz  c_        t*        j,                  j/                  t        j                   j'                  |d            }
t*        j,                  j/                  t        j                   j'                  |d            }| j                  r| xj0                  |
|gz  c_        n| xj0                  |
gz  c_        d| _         y  d| _        y )Nr:   r;   r=   Fgmock
gmock_mainT)z"/usr/src/googletest/googlemock/srcz/usr/src/gmock/srcz/usr/src/gmockr]   rM   includezgmock-all.cczgmock_main.cc)r>   r?   r@   r=   rB   r   r4   rC   copygtest_factoryrN   rO   rP   rR   rT   r^   r_   r`   re   rd   rQ   r   rb   rc   rS   )rF   rG   r3   rH   gtest_kwargsfoundgmock_detectgmock_main_detectr[   d2rW   rX   rI   s               r-   r?   zGMockDependencySystem.__init__   s$   {FUCJJvu-	''TEUEUWY(Z[!DM {{}99#(L 
 (({DDTDTVb)cd!DM ))66w"M ..;;L$((TVW.? DMNNl*Nyy"33 DM_ 	Aww~~a  $ WW%%bggll1d&;<!!dQhr	4"'',,rS\B];]%^^!"--::277<<>;Z[#==;;BGGLLO<\]99LLWh$77LLLWI-L %	  r,   c                    | j                   ryyrh   ri   rj   s    r-   rk   zGMockDependencySystem.log_info   rl   r,   rm   ru   )r'   r(   r)   r?   rk   rv   rw   s   @r-   r   r      s    1f#r,   r   c                        e Zd Zd fdZ xZS )GMockDependencyPCc                \    |dk(  sJ |j                  d      rd}t        | 	  |||       y )Nr   r=   r   r{   rE   s       r-   r?   zGMockDependencyPC.__init__   r|   r,   r}   r~   rw   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-DNDEBUGc                   t        d      | _        |j                  | j                  |         j                  r| j                  j                  d       n| j                  j                  d       t        |   |||d       g | _        t        j                         | _        g | _        | j                  sy | j                  dgd      | _        t        t!        |d            }| j#                  |       t        t!        |d            }| j#                  |d	
       t        j                  | j                  dgd            }t%        |j'                  | j(                              | _        t-        || j.                  | j*                        | _        t1        | j2                  d      r| j5                  |       n| j7                          t9        || j.                  | j:                        | _        | j=                  | j:                        | _        | j?                  tA        || j.                  i             sd	| _        y y )Nr   zllvm-config-64zllvm-config-32r:   r;   z--componentsr$   optional_modulesF)requiredz
--cppflagsrQ   z>= 3.9)!r   toolsr0   get_for_machine_from_kwargs	is_64_bitappendr>   r?   provided_modulesr   
OrderedSetrequired_modulesmodule_detailsrC   get_config_valuer   r   check_componentslist
difference(_LLVMDependencyConfigTool__cpp_blacklistrQ   r   r4   r	   r&   _set_new_link_args_set_old_link_argsr   rR   ._LLVMDependencyConfigTool__fix_bogus_link_argsrB   r   )rF   rG   r3   rH   r$   opt_modulescargsrI   s          r-   r?   z!LLVMDependencyConfigTool.__init__   s   (7
  @ @ HISSJJ./JJ./ 	{FUC-/:B:M:M:O-/}} $ 5 5~6F	 R	 BCg&#OF<N$OPkE:##D$9$9<..$YZ !1!1$2F2F!GH4[$BRBRTXTeTef4<<2##K0##%-k4;K;KT^^\33DNNC''TEUEUWY(Z[!DM \r,   c                   g }|D ]  }|j                  d      r2|j                  d      r!|j                  |j                  d             F|j                  d      r`| j                  j
                  j                  | j                     d   }|j                  |j                  |j                  d                   |j                  |        |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 ..."
        -lr/   z	-LIBPATH:r:   )

startswithendswithr   lstriprP   coredata	compilersr4   extendget_linker_search_args)rF   argsnew_argsargr:   s        r-   __fix_bogus_link_argsz.LLVMDependencyConfigTool.__fix_bogus_link_args   s      	%C~~d#U(;

4 01,hh''11$2B2BCEJ : :3::k;R ST$	% r,   c                    |rdnd}| j                   }d| _         	 | j                  d|gd      | _        || _         y# || _         w xY w)z9Use llvm-config's --libfiles to check if libraries exist.--link-shared--link-staticTz
--libfiles N)r   r   rR   )rF   sharedmoderestores       r-   __check_libfilesz)LLVMDependencyConfigTool.__check_libfiles  sL    "(o --	$ "22L$3GLDN#DMGDMs	   < 	Ac           
        	 | j                  dgd      d   }| j
                  s|dk(  r	 | j                  d       n#| j
                  r|dk(  r	 | j                  d       | j
                  rddgndg}| j                  ddg|z   t-        | j.                        z   d      | _        y# t        $ r t        j                  d       d| _        Y yw xY w# t        $ r t        || j                        }| j                  d	gd      d   }t        t        j                  t        j                  j                  |d
|                   }|s| j                   r d| _        Y y| j                  dgd      | _        t        j                  j%                  |d         j'                  |      j)                  d      }| j"                  j+                  d|        Y yw xY w# t        $ r | j                   r d| _        Y yw xY w)z/How to set linker args for LLVM versions >= 3.9z--shared-moderR   r   z+llvm-config --shared-mode returned an errorFNstaticT--libdirzlibLLVM*	--ldflagslibr   r   r   --system-libsr   --libs)r   
IndexErrorr   debugrC   r   )_LLVMDependencyConfigTool__check_libfilesr   r6   r4   sortedglobiglobr^   r_   rd   r   rR   basenamerstripr   r   r   r   )rF   r3   r   lib_extlibdirmatcheslibnamerR   s           r-   r   z+LLVMDependencyConfigTool._set_new_link_args  s   	((/):KHKD {{tx/%%d+  [[TX-
%%e, ;?++_o6OK\	..{#i/$t7L7L2MM_  	JJDE!DM	$ ' 3KAQAQR..
|[I!L BGGLL8G9AU,V!WX}}$)DM!%!6!6}k!R''**71:6==gFMMeT%%7)n5, ' == %	s<   B% C G %%CCB
GA6GGG87G8c           	        | j                   r0| j                  g dt        | j                        z   d      | _        y| j                  dgd      d   }d| j
                   }t        j                  | d      }t        j                  |      D ]_  }|j                  |      sd| dj                  t        j                  j                  |j                  d	            d         g| _         y t        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   rR   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   rR   r&   recompiler^   listdirmatchformatr_   splitextr   r   )rF   r   expected_namere_namefile_s        r-   r   z+LLVMDependencyConfigTool._set_old_link_argsU  s     ;;!2284@U@U;VVDN **J<EaHF&t||n5Mjj]O3C!DEGF+ O=='(*6(m&,mmBGG4D4DU\\RWEX4YZ[4\&]&_DN	O *MO Or,   c                   t        t        |            D ]t  }d}|| j                  vr)|r$d| _        | j                  rt        d|       d}nd}n| j                  j                  |       | j                  j                  ||z          v y)zCheck for llvm components (modules in meson terms).

        The required option is whether the module is required, not whether LLVM
        is required.
        r   Fz(Could not find required LLVM Component: z	(missing)z(missing but optional)N)
r   setr   rC   r   r   r   addr   r   )rF   r$   r   modstatuss        r-   r   z)LLVMDependencyConfigTool.check_componentst  s     #g,' 	5CF$///$)DM}}1FseLN N(F5F%%))#.&&sV|4	5r,   c                X    | j                   rddj                  | j                         z   S y)Nz	modules: z, r   )r   rd   rj   s    r-   log_detailsz$LLVMDependencyConfigTool.log_details  s(    4+>+>!???r,   r}   )r   r#   rq   r#   )r   rt   rq   rr   )r3   ro   rq   rr   rs   )T)r$   r#   r   rt   rq   rr   ru   )r'   r(   r)   __doc__	tool_namer   r?   r   r   r   r   r   r   rv   rw   s   @r-   r   r      s<     I!lO'R.$ 5nO>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 )LLVMDependencyCMakec                   t        t        |d            | _        t        t        |d            | _        d |j	                  dd      r!|j
                  j                  j                  n |j
                  j                  j                  rt        fddD              sEt        j                  | t        d      ||       g | _        || _        t        j                   d       y t"        	| -  |||d	d
       | j$                  y | j&                  sy | j(                  s8t+        | j,                  d      r"| j                  rt        j                   d       y | j$                  j/                  d      }| j$                  j/                  d      }t1        |      dk(  r|d   j3                  d      }|D cg c]  }d|z   	 c}|z   }| xj4                  |D cg c]  }|| j4                  vs| c}z  c_        t7        || j8                  | j4                        | _        | j;                  t=        || j8                  i             sd| _        y y c c}w c c}w )Nr$   r   nativeFc              3  &   K   | ]  }|v  
 y wNr+   ).0xr   s     r-   	<genexpr>z/LLVMDependencyCMake.__init__.<locals>.<genexpr>  s     #IqAN#Is   )cr:   cmakezYThe LLVM dependency was not found via CMake since both a C and C++ compiler are required.r:   T)r<   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   r    rM   )r   r   llvm_modulesllvm_opt_modulesr@   r   r   buildhostallr   r?   r   found_modulesrG   r   warningr>   traceparserrC   r   r	   r&   get_cmake_varlensplitrQ   r   r4   rB   r   )
rF   rG   rP   rH   inc_dirsdefsr   tempr   rI   s
           @r-   r?   zLLVMDependencyCMake.__init__  s   )/&)*LM -ofFX.Y Z	::h&..44I..33I#IL#I I''.@.I3PVW /1DDI LLtusFUW[\#}} {{t||WE$J[J[LL~ ##112HI--.CDt9>7==%D"*+Qq+d2LA$:K:K1KaLL4S$:J:JDL]L]^''T=M=Mr(RS!DM T ,Ls   5II+Ic                     y)NzCMakeListsLLVM.txtr+   rj   s    r-   _main_cmake_filez$LLVMDependencyCMake._main_cmake_file  s    #r,   c                V   dd}dd}t        d      D cg c]  }t         ||      d      s ||       }}| j                  r;t        d      D cg c]'  }t         ||      | j                        s  ||      ) }}t	        |t        j                  |            S c c}w c c}w )Nc                <    t        | j                  d      dz         S )N-z.0)r   strip)reqs    r-   ver_from_sufz=LLVMDependencyCMake.llvm_cmake_versions.<locals>.ver_from_suf  s    !#))C."566r,   c                D    t        | d|z         ryt        | d|z         ryy)N=r   <r   )r	   )abs     r-   version_sorterz?LLVMDependencyCMake.llvm_cmake_versions.<locals>.version_sorter  s'    q#a%(q#a%(r,   r   z>=0)key)r  rn   rq   rn   )r  rn   r  rn   rq   int)r   r	   version_reqsr
   r   	functools
cmp_to_key)rF   r  r  r   llvm_requested_versionss        r-   llvm_cmake_versionsz'LLVMDependencyCMake.llvm_cmake_versions  s    	7	 =PPR<S"qWfgstugvx}W~<?""@STV@W  'U1[op|}~p  BF  BS  BS  \T|A  'U#  'U-93G3G3WXX	 #@ 'Us   B!
B!!B&5
B&c           	        dj                  dj                  | j                              dj                  dj                  | j                              dj                  dj                  t	        | j
                                    dj                  dj                  | j                                     dj                  | j                  rd      gS 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   rd   r   r   r   rG   r  r   rj   s    r-   _extra_cmake_optsz%LLVMDependencyCMake._extra_cmake_opts  s    299#((4CTCT:UV299#((4CXCX:YZ/66sxx@STXT]T]@^7_`*11#((4;S;S;U2VW'..uN	P 	P JNN	P 	Pr,   c                   g }|D ]x  \  }}| j                   j                  d|       }|sD|r| j                  d| d      t        j                  dt        j
                  |      dd       j|D ]
  }|||fgz  } z |S )NMESON_LLVM_TARGETS_zLLVM module z was not foundzOptional LLVM modulezwas not foundF)fatal)r   r   _gen_exceptionr   r   bold)rF   r$   
componentsresr   r   
cm_targetsis           r-   _map_module_listz$LLVMDependencyCMake._map_module_list  s    $ 		'MC))77:McU8STJ--SE.PQQLL!73`ef 'H&'		' 
r,   c                P    | j                   j                  d|       }|r|d   S |S )NMESON_TARGET_TO_LLVM_r   )r   r   )rF   module	orig_names      r-   _original_module_namez)LLVMDependencyCMake._original_module_name  s2    $$225J6(3ST	Q<r,   )rG   rn   rP   ro   rH   rp   rq   rr   ru   )rq   r#   )r$   T.List[T.Tuple[str, bool]]r!  r+  rq   r+  )r(  rn   rq   rn   )
r'   r(   r)   r?   r  r  r  r%  r*  rv   rw   s   @r-   r   r     s$    -^$Y&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.
    c                (    t         |   d||       y )Nvalgrind)r>   r?   )rF   rP   rH   rI   s      r-   r?   zValgrindDependency.__init__  s    S&1r,   c                    g S r   r+   )rF   r<   raws      r-   get_link_argsz ValgrindDependency.get_link_args  s    	r,   )rP   ro   rH   rp   )NF)r<   r%   r1  rt   rq   r#   )r'   r(   r)   r   r?   r2  rv   rw   s   @r-   r-  r-    s    2 r,   r-  r/  c                        e Zd Zd fdZ xZS )ZlibSystemDependencyc                   t         |   |||       ddlm} ddlm} | j                  j                  | j                     }|j                         rt        | j                  ||f      s0|j                         s |j                         s|j                         rd| _        dg| _        n| j                  j#                         dk(  rddg}nd	g}|D ]b  }| j                  j%                  ||g | j&                        }	| j                  j)                  d
d|| g      }
|	sN|
d   sTd| _        |	| _         n y | j                  j+                  dd| j                  g | g      \  }}|j-                  d      | _        y )Nr   )AppleClangCCompiler)AppleClangCPPCompilerTz-lzmsvczlib1zlibzzzlib.hr   )dependenciesr   ZLIB_VERSIONz#include <zlib.h>")r>   r?   compilers.cr6  compilers.cppr7  rP   r0   r4   r2   
isinstancerN   
is_freebsdis_dragonflybsd
is_androidrC   rR   get_argument_syntaxrO   libtype
has_header
get_definer  r&   )rF   rG   r3   rH   r6  r7  r5   libsr   lhv_rI   s                r-   r?   zZlibSystemDependency.__init__  sZ   {F359HHd../ [[]z$*<*<?RTi>jk!"3"3"5
 !DM#WDN!!5576A(u &&33Cb$,,W&&11(B[_Z`1a1$(DM%&DN !!,,^=PRVRZRZ\^ae`fg1wws|r,   r}   r~   rw   s   @r-   r4  r4    s    !$ !$r,   r4  c                  D     e Zd Zd fdZedd       Zedd       Z xZS )JNISystemDependencyc                .
   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                  |j!                  dg             }|D ]L  }|dvsd| d}| j"                  rt%        j&                  |       nt%        j(                  |       d	| _         y  d
|v rIt-        | j                  |d
         s0t%        j&                  d| j                   d|d
           d	| _        y |j.                  | j                     j1                         | _        | j2                  sft5        j6                  t9        j:                  | j                  j<                  d               j?                         j@                  d   | _        |jC                         rt5        j6                  d      }|| j2                  j@                  v rtE        jF                  ddd|jH                  gtD        jJ                        }|jL                  dk7  rHd}| j"                  rt%        j&                  |       d	| _        y t%        j(                  |       d	| _        y t5        j6                  |jN                  jQ                         jS                               | _        | jU                  |      }	|	t%        j&                  d       d	| _        y | j2                  dz  }
| jV                  jY                  d|
        | jV                  jY                  d|
|	z          |rN|j[                         r| j2                  dz  }|}nYt-        | j                  d      r/| j2                  dz  dz  | j]                  |jH                        z  }n| j2                  dz  }|dz  }d|v rb| j^                  ja                  d|tc        |      g      }|t%        j(                  d       d	| _        n| jd                  jg                  |       d|v ri| j^                  ja                  d |tc        |      g      }|$t%        j(                  d!       d	| _        d"| _        y | jd                  jg                  |       d"| _        y )#Njnirp   )0.62.0r   javar$   >   awtjvmzUnknown JNI module ()Fr&   zIncorrect JDK version found (z
), wanted r   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   rM   r   z<= 1.8.0jreserverrU  )
extra_dirszjvm library not found.rT  jawtzjawt library not found.T)4r>   r?   Tcastfeature_sincerP   r0   r4   r   r   r   rG   javacr&   r   listifyr@   r   r   errorr   rC   r	   
propertiesget_java_home	java_homepathlibPathshutilwhichexelistresolveparentsr2   
subprocessrun
cpu_familyPIPE
returncoderW  decoder  :_JNISystemDependency__machine_info_to_platform_include_dirrQ   r   r1   #_JNISystemDependency__cpu_translaterN   rO   rn   rR   r   )rF   r3   rH   r5   r$   r(  msgproblem_java_prefixr"  platform_include_dirjava_home_includejava_home_libjava_home_lib_serverrU  r[  rI   s                  r-   r?   zJNISystemDependency.__init__*  s?   QVV4H&-QR+HHd../--778H8HIIDII{D4D4DfM ))33D4D4DEfM
zz))'//

9b0IJ 	F^+,VHA6==JJsOJJsO %	 t||VIEV'WJJ6t||nJvV_O`Nabc!DM$//0@0@AOOQ~~$\\&,,tzz7I7I!7L*MNVVX``abcDN{{}&-ll3i&j#&$..*@*@@$..*BLRZ\]\h\h)i0:AC~~*j== JJsO ). !JJsO(-%,\\#**2C2C2E2K2K2M%NDN#JJ1M'JJ  F  G!DM NNY6  2&7%8!9:  2&7:N&N%O!PQ||~ $ 6'4$"4<<<$(NNU$:U$BTEYEYZ[ZfZfEg$gM$(NNU$:M'4x'?$((55e[VYZnVoUp5q;JJ78$)DMNN))#.))66v{X[\iXjWk6l<JJ89$)DM  NN))$/r,   c                .    ddi}|j                  | |       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)r@   )cpu	java_cpuss     r-   __cpu_translatez#JNISystemDependency.__cpu_translate  s#     g
	 }}S#&&r,   c                   | j                         ry| j                         ry| j                         ry| j                         ry| j	                         ry| j                         ry| j                         ry| j                         ryy	)
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_linuxr1   r2   is_sunosrB  	is_netbsd
is_openbsdrC  )r5   s    r-   &__machine_info_to_platform_include_dirz:JNISystemDependency.__machine_info_to_platform_include_dir  sj     ::<\\^[[]ZZ\\\^[[]\\^ r,   r3   ro   rH   r"   )r}  rn   rq   rn   )r5   z'MachineInfo'rq   r%   )r'   r(   r)   r?   staticmethodrs  rr  rv   rw   s   @r-   rO  rO  )  s2    Sj 	' 	'  r,   rO  rQ  c                        e Zd Zd fdZ xZS )JDKSystemDependencyc                    t         |   ||       d| _        | j                  j	                  t        ddd             y )N)z0.59.0r   zjdk system dependencyrR  z%Use the jni system dependency instead)r>   r?   r^  featurechecksr   r   )rF   r3   rH   rI   s      r-   r?   zJDKSystemDependency.__init__  s?    f-+!!"3#3#
 	r,   r  r~   rw   s   @r-   r  r    s     r,   r  jdkLLVM)cmake_classconfigtool_classllvmrK   )pkgconfig_classsystem_classr   r:  ZLIB)
cmake_namer  )r3   ro   r4   r   rq   rn   )G
__future__r   r   r^   r   re  rg  rl  typingr\  r  %mesonbuild.interpreterbase.decoratorsr   r   r   r   r3   r   r	   r
   r   r   r   baser   r   r   r   r   r   r   r   r   r   
configtoolr   rD   r   factoryr   miscr   	pkgconfigr   TYPE_CHECKING	envconfigr   r   r   typing_extensionsr    r"   r6   r8   ry   r   r   r   r   r-  r4  rO  r  CMAKECONFIG_TOOLllvm_factory	PKGCONFIGSYSTEMr   gmock_factoryzlib_factoryr+   r,   r-   <module>r     s	  $ #  	 	      C  - l l t  t  t " ,  & ! *??')(+!	 !	3#, 3#l4+ 48#, 8#v4+ 4H3 HTb/ bJ	, 	 * #$+ #$L{* {z &	- 	 & #4
/;;<#-	#  < %6  "3":":;%&	%  M %6  "3":":;%&	%  M #4
  "3"9"9;L;S;ST%	#  <r,   