o
    ¢Ùldft  ã                   @  sH  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 dd
lm Z  ddl!m"Z" ddl#m$Z$ ddl%m&Z& ddl'm(Z( e	j)r›ddl*m+Z+ ddlm,Z, ddlm-Z- d dl.m/Z/ G dd„ de/ƒZ0d9dd„Z1G dd„ deƒZ2G dd „ d e(ƒZ3G d!d"„ d"eƒZ4G d#d$„ d$e(ƒZ5G d%d&„ d&e"ƒZ6G d'd(„ d(e ƒZ7G d)d*„ d*e(ƒZ8G d+d,„ d,eƒZ9G d-d.„ d.eƒZ:G d/d0„ d0e:ƒZ;e$d1ej<ej=ge7e6d2Z>e$d3ej?ej@ge3e2d4ZAe$d5ej?ej@ge5e4d4ZBe$d6ej?ej<ej@gd7e9d8ZCdS ):é    )Ú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_libdirsÚSystemDependencyÚExternalDependencyÚDependencyTypeName)ÚCMakeDependency)ÚConfigToolDependency)ÚDependencyFactory)Úthreads_factory)ÚPkgConfigDependency)ÚMachineInfo)ÚEnvironment)ÚMachineChoice)Ú	TypedDictc                   @  s   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__© r'   r'   úzhome/ych/rk3568/buildroot/output/rockchip_rk3568_recovery/host/lib/python3.10/site-packages/mesonbuild/dependencies/dev.pyr   /   s   
 r   Úenvironmentú'Environment'Úfor_machiner   ÚreturnÚstrc                 C  s&   | j | }| ¡ rdS | ¡ rdS dS )z™This 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)r)   r+   Úmr'   r'   r(   Úget_shared_library_suffix6   s   
r3   c                      s<   e Zd Zd‡ fd	d
„Zddd„Zddd„Zddd„Z‡  ZS )ÚGTestDependencySystemÚnamer-   r)   r*   ÚkwargsúT.Dict[str, T.Any]r,   ÚNonec                   sV   t ƒ j|||dd | dd¡| _ddg| _|  t|| ji ƒ¡s%d| _d S |  	¡  d S )NÚcpp©ÚlanguageÚmainFz/usr/src/gtest/srcz"/usr/src/googletest/googletest/src)
ÚsuperÚ__init__Úgetr<   Úsrc_dirsÚ_add_sub_dependencyr   r+   Úis_foundÚdetect©Úselfr5   r)   r6   ©Ú	__class__r'   r(   r>   C   s   
zGTestDependencySystem.__init__c                 C  sÂ   | j  d| jg ¡}| j  d| jg ¡}|r4| jr|r4d| _g | _|| _| jr,|  j|7  _g | _d| _d S |  	¡ r\d| _dd„ | j
D ƒ| _g | _| jrR| j| jg| _n| jg| _d| _d S d| _d S )NÚgtestÚ
gtest_mainTc                 S  ó   g | ]}d | ‘qS ©ú-Ir'   )Ú.0Údr'   r'   r(   Ú
<listcomp>Y   ó    z0GTestDependencySystem.detect.<locals>.<listcomp>F)Úclib_compilerÚfind_libraryÚenvr<   rB   Úcompile_argsÚ	link_argsÚsourcesÚprebuiltÚdetect_srcdirÚsrc_include_dirsÚall_srcÚmain_src)rE   Zgtest_detectZgtest_main_detectr'   r'   r(   rC   L   s&   



zGTestDependencySystem.detectÚboolc                 C  sŽ   | j D ]A}tj |¡rD|| _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 qdS )Nzgtest-all.cczgtest_main.ccú..z
../includeTF)r@   ÚosÚpathÚexistsÚsrc_dirr   ÚFileÚfrom_absolute_fileÚjoinrZ   r[   ÚnormpathrY   )rE   Úsr'   r'   r(   rX   c   s   
ÿÿÿ÷
z#GTestDependencySystem.detect_srcdirc                 C  ó   | j rdS dS ©NrW   zbuilding self©rW   ©rE   r'   r'   r(   Úlog_infoq   ó   zGTestDependencySystem.log_info©r5   r-   r)   r*   r6   r7   r,   r8   ©r,   r8   )r,   r\   ©r,   r-   )r#   r$   r%   r>   rC   rX   rk   Ú__classcell__r'   r'   rF   r(   r4   B   s
    
	
r4   c                      ó   e Zd Zd	‡ fdd„Z‡  ZS )
ÚGTestDependencyPCr5   r-   r)   r*   r6   r7   c                   ó.   |dksJ ‚|  d¡rd}tƒ  |||¡ d S )NrH   r<   rI   ©r?   r=   r>   rD   rF   r'   r(   r>   z   ó   
zGTestDependencyPC.__init__©r5   r-   r)   r*   r6   r7   ©r#   r$   r%   r>   rp   r'   r'   rF   r(   rr   x   ó    rr   c                      s(   e Zd Zd‡ fd	d
„Zddd„Z‡  ZS )ÚGMockDependencySystemr5   r-   r)   r*   r6   r7   r,   r8   c              
     s¤  t ƒ j|||d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 ¡}|rn| jrU|rnd| _|  j|7  _| jri|  j|7  _d| _d S dD ]\}tj |¡rÌd| _tj tj |d	¡¡}	|  jd
| d
|	 d
tj |	d¡ g7  _tj tj |d¡¡}
tj tj |d¡¡}| jr¾|  j|
|g7  _n|  j|
g7  _d| _ d S qpd| _d S )Nr9   r:   r<   FÚgmockÚ
gmock_mainT)z"/usr/src/googletest/googlemock/srcz/usr/src/gmock/srcz/usr/src/gmockr]   rL   Úincludezgmock-all.cczgmock_main.cc)r=   r>   r?   r<   rA   r   r+   rB   ÚcopyÚgtest_factoryrQ   rR   rS   rU   rW   r^   r_   r`   re   rd   rT   r   rb   rc   rV   )rE   r5   r)   r6   Zgtest_kwargsÚfoundZgmock_detectZgmock_main_detectrN   Zd2rZ   r[   rF   r'   r(   r>   ‚   sF   *ó
zGMockDependencySystem.__init__c                 C  rg   rh   ri   rj   r'   r'   r(   rk   µ   rl   zGMockDependencySystem.log_inform   ro   )r#   r$   r%   r>   rk   rp   r'   r'   rF   r(   ry      s    3ry   c                      rq   )
ÚGMockDependencyPCr5   r-   r)   r*   r6   r7   c                   rs   )Nrz   r<   r{   rt   rD   rF   r'   r(   r>   ¾   ru   zGMockDependencyPC.__init__rv   rw   r'   r'   rF   r(   r€   ¼   rx   r€   c                      sj   e Zd ZdZdZdhZd!‡ fd
d„Zd"dd„Zd#dd„Zd$dd„Z	d%dd„Z
d&d'dd„Zd(dd „Z‡  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-DNDEBUGr5   r-   r)   r*   r6   r7   c                   s6  t dƒ| _|j|  |¡ jr| j d¡ n| j d¡ tƒ j|||dd g | _t	 
¡ | _g | _| js5d S |  dgd¡| _tt|dƒƒ}|  |¡ tt|dƒƒ}| j|d	d
 t	 
|  dgd¡¡}t| | j¡ƒ| _t| jdƒrv|  |¡ n|  ¡  t|| j| jƒ| _|  | j¡| _|  t|| ji ƒ¡s™d	| _d S d S )Nr‚   zllvm-config-64zllvm-config-32r9   r:   z--componentsr    Úoptional_modulesF)Úrequiredz
--cppflagsrT   z>= 3.9) r   Útoolsr/   Zget_for_machine_from_kwargsZ	is_64_bitÚappendr=   r>   Úprovided_modulesr   Ú
OrderedSetÚrequired_modulesÚmodule_detailsrB   Úget_config_valuer   r   Úcheck_componentsÚlistÚ
differenceÚ(_LLVMDependencyConfigTool__cpp_blacklistrT   r   r"   Ú_set_new_link_argsÚ_set_old_link_argsr   r+   rU   Ú._LLVMDependencyConfigTool__fix_bogus_link_argsrA   r   )rE   r5   r)   r6   r    Zopt_modulesZcargsrF   r'   r(   r>   Í   s4   


þz!LLVMDependencyConfigTool.__init__Úargsr   r,   c                 C  sx   g }|D ]5}|  d¡r| d¡r| | d¡¡ q|  d¡r4| jjj| j d }| | 	| d¡¡¡ q| |¡ q|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:r9   )
Ú
startswithÚendswithr†   ÚlstriprS   ÚcoredataÚ	compilersr+   ÚextendZget_linker_search_args)rE   r“   Únew_argsÚargr9   r'   r'   r(   Z__fix_bogus_link_argsõ   s   
z.LLVMDependencyConfigTool.__fix_bogus_link_argsÚsharedr\   r8   c                 C  s@   |rdnd}| j }d| _ z|  d|gd¡| _W || _ dS || _ w )z9Use llvm-config's --libfiles to check if libraries exist.ú--link-sharedú--link-staticTz
--libfilesÚ N)r„   r‹   rU   )rE   r   ÚmodeÚrestorer'   r'   r(   Z__check_libfiles  s   z)LLVMDependencyConfigTool.__check_libfilesc                 C  sx  z|   dgd¡d }W n ty   t d¡ d| _Y dS w | js€|dkr€z|  d¡ W ns ty   t|| j	ƒ}|   d	gd¡d }t
t tj |d
|› ¡¡ƒ}|s]| jrW‚ d| _Y dS |   dgd¡| _tj |d ¡ |¡ d¡}| j d|› ¡ Y dS w | jr |dkr z|  d¡ W n tyŸ   | jr™‚ d| _Y dS w | jr§ddgndg}|   ddg| t| jƒ d¡| _dS )z/How to set linker args for LLVM versions >= 3.9z--shared-moderU   r   z+llvm-config --shared-mode returned an errorFNÚstaticTú--libdirzlibLLVM*ú	--ldflagsÚlibr”   r   rŸ   ú--system-libsrž   ú--libs)r‹   Ú
IndexErrorr   ÚdebugrB   r£   Ú)_LLVMDependencyConfigTool__check_libfilesr   r3   r+   ÚsortedÚglobÚiglobr^   r_   rd   r„   rU   ÚbasenameÚrstripr—   r†   r   r‰   )rE   r)   r¡   Zlib_extÚlibdirÚmatchesÚlibnamerU   r'   r'   r(   r     sL   
ýòü
þz+LLVMDependencyConfigTool._set_new_link_argsc              	   C  s¤   | j r|  g d¢t| jƒ d¡| _dS |  dgd¡d }d| j› }t |› d¡}t 	|¡D ]}| 
|¡rMd|› d tj | d	¡¡d ¡g| _ dS q/td
ƒ‚)a:  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-linnking, we have to figure those out ourselves, because
        of course we do.
        )r¨   r¥   r§   rU   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‰   rU   r"   ÚreÚcompiler^   ÚlistdirÚmatchÚformatr_   Úsplitextr—   r   )rE   r±   Zexpected_nameZre_nameZfile_r'   r'   r(   r‘   S  s$   
þ
ÿýÿz+LLVMDependencyConfigTool._set_old_link_argsTr    r„   c                 C  sj   t t|ƒƒD ],}d}|| jvr$|r!d| _| jrtd|› ƒ‚d}n	d}n| j |¡ | j 	|| ¡ qdS )z¢Check 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‡   rB   r„   r   r‰   ÚaddrŠ   r†   )rE   r    r„   ÚmodÚstatusr'   r'   r(   rŒ   r  s   
ÿñz)LLVMDependencyConfigTool.check_componentsc                 C  s   | j rdd | j ¡ S dS )Nz	modules: z, r    )rŠ   rd   rj   r'   r'   r(   Úlog_details‰  s   z$LLVMDependencyConfigTool.log_detailsrv   )r“   r   r,   r   )r   r\   r,   r8   )r)   r*   r,   r8   rn   )T)r    r   r„   r\   r,   r8   ro   )r#   r$   r%   Ú__doc__Z	tool_namer   r>   r’   r«   r   r‘   rŒ   r¾   rp   r'   r'   rF   r(   r   Å   s    
(


7r   c                      sP   e Zd Zd‡ fd	d
„Zddd„Zddd„Zddd„Zddd„Zddd„Z‡  Z	S )ÚLLVMDependencyCMaker5   r-   rS   r*   r6   r7   r,   r8   c                   sd  t t|dƒƒˆ_t t|dƒƒˆ_d ‰ | dd¡r|jjj‰ n|jjj‰ ˆ r0t	‡ fdd„dD ƒƒsGt
 ˆtdƒ||¡ g ˆ_|ˆ_t d	¡ d S tƒ j|||d
dd ˆjd u rYd S ˆjs^d S ˆjsqtˆjdƒrqˆjrqt d¡ d S ˆj d¡}ˆj d¡}t|ƒdkrŠ|d  d¡}dd„ |D ƒ| }ˆ j‡fdd„|D ƒ7  _ˆ t|ˆji ƒ¡s°dˆ_d S d S )Nr    rƒ   ZnativeFc                 3  s    | ]}|ˆ v V  qd S ©Nr'   ©rM   Úx)r™   r'   r(   Ú	<genexpr>˜  s   € z/LLVMDependencyCMake.__init__.<locals>.<genexpr>)Úcr9   ÚcmakezYThe LLVM dependency was not found via CMake since both a C and C++ compiler are required.r9   T)r;   Zforce_use_global_compilersz< 7.0zcBefore version 7.0 cmake does not export modules for dynamic linking, cannot check required modulesZPACKAGE_INCLUDE_DIRSZPACKAGE_DEFINITIONSr   r   ú c                 S  rJ   rK   r'   rÂ   r'   r'   r(   rO   ·  rP   z0LLVMDependencyCMake.__init__.<locals>.<listcomp>c                   s   g | ]	}|ˆ j vr|‘qS r'   )rT   rÂ   rj   r'   r(   rO   ¸  s    )r   r   Úllvm_modulesÚllvm_opt_modulesr?   r˜   r™   ÚbuildÚhostÚallr   r>   r   Zfound_modulesr5   r   Úwarningr=   ÚtraceparserrB   r£   r   r"   Úget_cmake_varÚlenÚsplitrT   rA   r   r+   )rE   r5   rS   r6   Zinc_dirsZdefsÚtemprF   )r™   rE   r(   r>     s<   



þzLLVMDependencyCMake.__init__c                 C  s   dS )NzCMakeListsLLVM.txtr'   rj   r'   r'   r(   Ú_main_cmake_file½  s   z$LLVMDependencyCMake._main_cmake_filer   c                   sZ   ddd„‰dd	d
„}‡fdd„t dƒD ƒ}ˆ jr$‡ ‡fdd„t dƒD ƒ}t|t |¡dS )NÚreqr-   r,   c                 S  s   t |  d¡d ƒS )Nú-z.0)r
   Ústrip)rÔ   r'   r'   r(   Úver_from_sufÅ  s   z=LLVMDependencyCMake.llvm_cmake_versions.<locals>.ver_from_sufÚaÚbÚintc                 S  s(   t | d| ƒr	dS t | d| ƒrdS dS )Nú=r   ú<r   éÿÿÿÿ©r   )rØ   rÙ   r'   r'   r(   Úversion_sorterÈ  s
   z?LLVMDependencyCMake.llvm_cmake_versions.<locals>.version_sorterc                   s"   g | ]}t ˆ |ƒd ƒrˆ |ƒ‘qS )z>=0rÞ   rÂ   )r×   r'   r(   rO   Ï  s   " z;LLVMDependencyCMake.llvm_cmake_versions.<locals>.<listcomp>r    c                   s$   g | ]}t ˆ|ƒˆ jƒrˆ|ƒ‘qS r'   )r	   Úversion_reqsrÂ   ©rE   r×   r'   r(   rO   Ñ  s   $ )Úkey)rÔ   r-   r,   r-   )rØ   r-   rÙ   r-   r,   rÚ   )r   rà   r¬   Ú	functoolsÚ
cmp_to_key)rE   rß   Zllvm_requested_versionsr'   rá   r(   Úllvm_cmake_versionsÃ  s   

z'LLVMDependencyCMake.llvm_cmake_versionsc              	   C  s`   d  d | j¡¡d  d | j¡¡d  d t| jƒ¡¡d  d |  ¡ ¡¡d  | 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={}ZOFFZON)r¸   rd   rÈ   rÉ   r   r5   rå   r£   rj   r'   r'   r(   Ú_extra_cmake_optsÖ  s   üüz%LLVMDependencyCMake._extra_cmake_optsr    úT.List[T.Tuple[str, bool]]Ú
componentsc                 C  st   g }|D ]3\}}| j  d|› ¡}|s+|r|  d|› d¡‚tjdt |¡ddd q|D ]	}|||fg7 }q-q|S )NZMESON_LLVM_TARGETS_zLLVM module z was not foundzOptional LLVM modulezwas not foundF)Úfatal)rÎ   rÏ   Z_gen_exceptionr   rÍ   Zbold)rE   r    ré   Úresr¼   r„   Z
cm_targetsÚir'   r'   r(   Ú_map_module_listÝ  s   ÿz$LLVMDependencyCMake._map_module_listÚmodulec                 C  s"   | j  d|› ¡}|r|d S |S )NZMESON_TARGET_TO_LLVM_r   )rÎ   rÏ   )rE   rî   Z	orig_namer'   r'   r(   Ú_original_module_nameë  s   z)LLVMDependencyCMake._original_module_name)r5   r-   rS   r*   r6   r7   r,   r8   ro   )r,   r   )r    rè   ré   rè   r,   rè   )rî   r-   r,   r-   )
r#   r$   r%   r>   rÓ   rå   rç   rí   rï   rp   r'   r'   rF   r(   rÀ   Ž  s    
.


rÀ   c                      s.   e Zd ZdZd‡ fdd„Zdddd„Z‡  ZS )ÚValgrindDependencyzy
    Consumers of Valgrind usually only need the compile args and do not want to
    link to its (static) libraries.
    rS   r*   r6   r7   c                   s   t ƒ  d||¡ d S )NZvalgrind)r=   r>   )rE   rS   r6   rF   r'   r(   r>   ÷  s   zValgrindDependency.__init__NFr;   r!   Úrawr\   r,   r   c                 C  s   g S rÁ   r'   )rE   r;   rñ   r'   r'   r(   Úget_link_argsú  s   z ValgrindDependency.get_link_args)rS   r*   r6   r7   )NF)r;   r!   rñ   r\   r,   r   )r#   r$   r%   r¿   r>   rò   rp   r'   r'   rF   r(   rð   ò  s    rð   c                      rq   )
ÚZlibSystemDependencyr5   r-   r)   r*   r6   r7   c                   s  t ƒ  |||¡ ddlm} ddlm} | jj| j }| 	¡ r't
| j||fƒs3| ¡ s3| ¡ s3| ¡ r;d| _dg| _n7| j ¡ dkrGddg}nd	g}|D ]#}| j ||g ¡}	| jjd
d|| gd}
|	ro|
d rod| _|	| _ nqLd S | j dd| jg | g¡\}}| d¡| _d S )Nr   )ÚAppleClangCCompiler)ÚAppleClangCPPCompilerTz-lzÚmsvcZzlib1ÚzlibÚzzzlib.hr    )Údependenciesr   ÚZLIB_VERSIONz#include <zlib.h>ú")r=   r>   Zcompilers.crô   Zcompilers.cpprõ   rS   r/   r+   r1   Ú
isinstancerQ   Ú
is_freebsdÚis_dragonflybsdZ
is_androidrB   rU   Zget_argument_syntaxrR   Ú
has_headerZ
get_definerÖ   r"   )rE   r5   r)   r6   rô   rõ   r2   Zlibsr¦   ÚlÚhÚvÚ_rF   r'   r(   r>      s6   ÿÿÿ

€zZlibSystemDependency.__init__rv   rw   r'   r'   rF   r(   ró   þ  rx   ró   c                      s:   e Zd Zd‡ fdd„Zedd
d„ƒZeddd„ƒZ‡  ZS )ÚJNISystemDependencyr)   r*   r6   r   c                   s  t ƒ  d|t d|¡¡ d| _| jj| j }d|jj	| j vr(t
| j|| jdƒ |jj	| j d | _| jj| _t | dg ¡¡}|D ] }|dvrbd|› d}| jrWt |¡ nt |¡ d	| _ d S qBd
|v r‚t| j|d
 ƒs‚t d| j› d|d
 › ¡ d	| _d S |j| j  ¡ | _| jsát t | jjd ¡¡ ¡ j d | _| !¡ rát d¡}|| jj v rát"j#ddd|j$gt"j%d}|j&dkrÖd}| jrÌt |¡ nt |¡ d	| _d S t |j' (¡  )¡ ¡| _|  *|¡}	|	d u rôt d¡ d	| _d S | jd }
| j+ ,d|
› ¡ | j+ ,d|
|	 › ¡ |r…| -¡ r| jd }|}nt| jdƒr2| jd d |  .|j$¡ }n| jd }|d }d|v r`| j/j0d|t1|ƒgd}|d u rZt d¡ d	| _n| j2 3|¡ d|v r…| j/j0d |t1|ƒgd}|d u rt d!¡ d	| _n| j2 3|¡ d"| _d S )#NZjnir7   )ú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|   rL   r¦   z<= 1.8.0ZjreÚserverr  )Ú
extra_dirszjvm library not found.r  Újawtzjawt library not found.T)4r=   r>   ÚTÚcastÚfeature_sincerS   r/   r+   r˜   r™   r   r5   Zjavacr"   r   Zlistifyr?   r„   r   Úerrorrª   rB   r   Z
propertiesZget_java_homeZ	java_homeÚpathlibÚPathÚshutilÚwhichZexelistÚresolveÚparentsr1   Ú
subprocessÚrunZ
cpu_familyÚPIPEÚ
returncoder
  ÚdecoderÖ   Ú:_JNISystemDependency__machine_info_to_platform_include_dirrT   r†   r0   Ú#_JNISystemDependency__cpu_translaterQ   rR   r-   rU   rš   )rE   r)   r6   r2   r    rî   ÚmsgZproblem_java_prefixrë   Zplatform_include_dirZjava_home_includeZjava_home_libZjava_home_lib_serverr  r  rF   r'   r(   r>   %  s†   

ù	$
ÿ














zJNISystemDependency.__init__Úcpur-   r,   c                 C  s   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)r?   )r   Z	java_cpusr'   r'   r(   Z__cpu_translatez  s   ÿz#JNISystemDependency.__cpu_translater2   ú'MachineInfo'r!   c                 C  sd   |   ¡ rdS |  ¡ rdS |  ¡ rdS |  ¡ rdS |  ¡ rdS |  ¡ r$dS |  ¡ r*dS |  ¡ r0d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ÚsolarisZfreebsdZnetbsdZopenbsdZ	dragonflyN)Zis_linuxr0   r1   Zis_sunosrý   Z	is_netbsdZ
is_openbsdrþ   )r2   r'   r'   r(   Z&__machine_info_to_platform_include_dir†  s"   z:JNISystemDependency.__machine_info_to_platform_include_dir©r)   r*   r6   r   )r   r-   r,   r-   )r2   r#  r,   r!   )r#   r$   r%   r>   Ústaticmethodr  r  rp   r'   r'   rF   r(   r  $  s    Ur  c                      s   e Zd Zd‡ fdd„Z‡  ZS )ÚJDKSystemDependencyr)   r*   r6   r   c                   s,   t ƒ  ||¡ d| _| j tdddƒ¡ d S )N)z0.59.0r    zjdk system dependencyr  z%Use the jni system dependency instead)r=   r>   r  Zfeaturechecksr†   r   )rE   r)   r6   rF   r'   r(   r>   £  s   
ýzJDKSystemDependency.__init__r(  rw   r'   r'   rF   r(   r*  ¢  s    r*  ZLLVM)Zcmake_classZconfigtool_classrH   )Zpkgconfig_classÚsystem_classrz   r÷   ZZLIB)Z
cmake_namer+  )r)   r*   r+   r   r,   r-   )DÚ
__future__r   r­   r^   r´   r  r  r  Útypingr  rã   Z%mesonbuild.interpreterbase.decoratorsr   r    r   r   r)   r   r   r	   r
   r   r   Úbaser   r   r   r   r   r   r   rÆ   r   Z
configtoolr   Úfactoryr   Zmiscr   Z	pkgconfigr   ÚTYPE_CHECKINGZ	envconfigr   r   r   Útyping_extensionsr   r   r3   r4   rr   ry   r€   r   rÀ   rð   ró   r  r*  ZCMAKEZCONFIG_TOOLZllvm_factoryZ	PKGCONFIGZSYSTEMr~   Zgmock_factoryZzlib_factoryr'   r'   r'   r(   Ú<module>   sz   $
6	;	 Jd&~
ü
ü
ü
ü