o
    uJAf<                     @  s  U d dl mZ d dlmZ d dlZd dlZd dlmZ ddl	m
Z
 ddl
mZmZ ddl	mZ d d	lmZ d
Zg dZi ddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-Zd.ed/< i d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSiZd.edT< i eeZdUdVdWdXdYZd.edZ< G d[d\ d\eZG d]d^ d^Zed_d`G dadb dbeZG dcdd ddZG dedf dfZdS )g    )annotations)	dataclassN)Enum   )mesonlib)EnvironmentExceptionHoldableObject)mlog)Path)#aarch64alphaZarcarmZavrc2000ZcskyZdspice2kZft32ia64loongarch64Zm68kZ
microblazeZmipsmips64Zmsp430ZpariscZpic24ppcppc64Zriscv32riscv64Zrl78ZrxZs390s390xZsh4Zsparcsparc64sw_64Zwasm32wasm64x86x86_64)r   r   r   r   r   r   r   r   r   r   r   r   cZCCcppZCXXcsZCSCdZDCfortranZFCobjcZOBJCobjcppZOBJCXXrustZRUSTCvalaZVALACnasmNASMZc_ldZCC_LDZcpp_ldZCXX_LDd_ldZDC_LD
fortran_ldZFC_LDZobjc_ldZOBJC_LD	objcpp_ldZ	OBJCXX_LDrust_ldZRUSTC_LDzT.Mapping[str, str]ENV_VAR_COMPILER_MAParZARasZASldZLDnmZNMZobjcopyZOBJCOPYZobjdumpZOBJDUMPZranlibZRANLIBZreadelfZREADELFsizeZSIZEstringsZSTRINGSstripZSTRIPZwindresZWINDREScmakeCMAKEqmakeQMAKE
pkg-config
PKG_CONFIGmakeZMAKEZvapigenZVAPIGENzllvm-configZLLVM_CONFIGENV_VAR_TOOL_MAPZD_LDZF_LDZRUST_LDZ	OBJCPP_LD)r'   r(   r*   r)   DEPRECATED_ENV_PROG_MAPc                   @  s   e Zd ZdZdZdZdS )CMakeSkipCompilerTestalwaysneverZdep_onlyN)__name__
__module____qualname__ZALWAYSZNEVERDEP_ONLY rC   rC   9/usr/lib/python3.10/site-packages/mesonbuild/envconfig.pyr<      s    r<   c                   @  s   e Zd Z	d5d6ddZd7d
dZd8ddZd9ddZd9ddZd:ddZd;ddZ	d<ddZ
d=ddZd;dd Zd<d!d"Zd>d$d%Zd?d(d)Zd@d,d-ZdAd0d1Zd5dBd3d4ZdS )C
PropertiesN
propertiesIT.Optional[T.Dict[str, T.Optional[T.Union[str, bool, int, T.List[str]]]]]c                 C  s   |pi | _ d S NrF   )selfrF   rC   rC   rD   __init__   s   zProperties.__init__languagestrreturnboolc                 C  s   |d | j v S NZ_stdlibrI   )rJ   rL   rC   rC   rD   
has_stdlib      zProperties.has_stdlibT.Union[str, T.List[str]]c                 C  sF   | j |d  }t|tr|S t|tsJ |D ]	}t|ts J q|S rP   )rF   
isinstancerM   list)rJ   rL   ZstdlibirC   rC   rD   
get_stdlib   s   
zProperties.get_stdlibT.Optional[str]c                 C  (   | j dd }|d u st|tsJ |S )NrootrF   getrT   rM   )rJ   rZ   rC   rC   rD   get_root      zProperties.get_rootc                 C  rY   )Nsys_rootr[   )rJ   r_   rC   rC   rD   get_sys_root   r^   zProperties.get_sys_rootT.Optional[T.List[str]]c                 C  s@   | j dd }|d u r|S t|}|D ]	}t|tsJ q|S )NZpkg_config_libdir)rF   r\   r   listifyrT   rM   )rJ   presrV   rC   rC   rD   get_pkg_config_libdir   s   
z Properties.get_pkg_config_libdirc                 C  *   d| j vrdS | j d }t|tsJ |S )NZcmake_defaultsTrF   rT   rO   rJ   rd   rC   rC   rD   get_cmake_defaults   
   

zProperties.get_cmake_defaultsT.Optional[Path]c                 C  sJ   d| j vrd S | j d }t|tsJ t|}| s#td| d|S )Ncmake_toolchain_filezcmake_toolchain_file (z) is not absolute)rF   rT   rM   r
   is_absoluter   )rJ   rawrl   rC   rC   rD   get_cmake_toolchain_file   s   

z#Properties.get_cmake_toolchain_filer<   c              	   C  s\   d| j vrtjS | j d }t|tsJ zt|W S  ty-   td|dd tD w )NZcmake_skip_compiler_testzO"{}" is not a valid value for cmake_skip_compiler_test. Supported values are {}c                 S  s   g | ]}|j qS rC   )value).0erC   rC   rD   
<listcomp>   s    z;Properties.get_cmake_skip_compiler_test.<locals>.<listcomp>)rF   r<   rB   rT   rM   
ValueErrorr   format)rJ   rn   rC   rC   rD   get_cmake_skip_compiler_test   s   


z'Properties.get_cmake_skip_compiler_testc                 C  rf   )NZcmake_use_exe_wrapperTrg   rh   rC   rC   rD   get_cmake_use_exe_wrapper   rj   z$Properties.get_cmake_use_exe_wrapperc                 C  s$   t d| jd}|rt|S d S )NrX   Z	java_home)TcastrF   r\   r
   rJ   rp   rC   rC   rD   get_java_home   s   zProperties.get_java_homeT.List[str]c                 C  s:   t | jdg }tdd |D stdtd|S )NZbindgen_clang_argumentsc                 s  s    | ]}t |tV  qd S rH   )rT   rM   )rq   vrC   rC   rD   	<genexpr>   s    z4Properties.get_bindgen_clang_args.<locals>.<genexpr>z?bindgen_clang_arguments must be a string or an array of stringsr|   )r   rb   rF   r\   allr   rx   ry   rz   rC   rC   rD   get_bindgen_clang_args   s   z!Properties.get_bindgen_clang_argsotherobjectc                 C  s   t |t| r| j|jkS tS rH   )rT   typerF   NotImplemented)rJ   r   rC   rC   rD   __eq__   s   zProperties.__eq__key0T.Optional[T.Union[str, bool, int, T.List[str]]]c                 C  s
   | j | S rH   rI   )rJ   r   rC   rC   rD   __getitem__      
zProperties.__getitem__item$T.Union[str, bool, int, T.List[str]]c                 C  s
   || j v S rH   rI   )rJ   r   rC   rC   rD   __contains__  r   zProperties.__contains__defaultc                 C  s   | j ||S rH   )rF   r\   )rJ   r   r   rC   rC   rD   r\     rR   zProperties.getrH   )rF   rG   )rL   rM   rN   rO   )rL   rM   rN   rS   )rN   rX   )rN   ra   rN   rO   )rN   rk   )rN   r<   rN   r|   )r   r   rN   rO   )r   rM   rN   r   )r   r   rN   rO   )r   rM   r   r   rN   r   )r?   r@   rA   rK   rQ   rW   r]   r`   re   ri   ro   rv   rw   r{   r   r   r   r   r\   rC   rC   rC   rD   rE      s$    


	


	








rE   T)unsafe_hashc                   @  s
  e Zd ZU ded< ded< ded< ded< ded< ded< d8ddZd9ddZed:ddZd;ddZd;ddZ	d;ddZ
d;ddZd;ddZd;dd Zd;d!d"Zd;d#d$Zd;d%d&Zd;d'd(Zd;d)d*Zd;d+d,Zd;d-d.Zd;d/d0Zd9d1d2Zd9d3d4Zd;d5d6Zd7S )<MachineInforM   system
cpu_familycpuendianrX   kernel	subsystemrN   Nonec                 C  s   | j tv | _d S rH   )r   CPU_FAMILIES_64_BITZ	is_64_bitrJ   rC   rC   rD   __post_init__     zMachineInfo.__post_init__c                 C  s   d| j  d| j d| j dS )Nz<MachineInfo:  z (z)>)r   r   r   r   rC   rC   rD   __repr__  s   zMachineInfo.__repr__literalT.Dict[str, str]'MachineInfo'c                 C  s   h d}t ||k rtd| dd|t |  |d }|tvr,td| d |d }|d	vr<td
|  |d }|dd }|dd }| |||d |||S )N>   r   r   r   r   zMachine info is currently 
zbut is missing {}.r   zUnknown CPU family zF, please report this at https://github.com/mesonbuild/meson/issues/newr   )littlebigzUnknown endian r   r   r   r   )setr   ru   known_cpu_familiesr	   warningr\   )clsr   Zminimum_literalr   r   r   r   r   rC   rC   rD   from_literal  s"   
zMachineInfo.from_literalrO   c                 C  
   | j dkS )z%
        Machine is windows?
        windowsr   r   rC   rC   rD   
is_windows-     
zMachineInfo.is_windowsc                 C  r   )z$
        Machine is cygwin?
        cygwinr   r   rC   rC   rD   	is_cygwin3  r   zMachineInfo.is_cygwinc                 C  r   )z#
        Machine is linux?
        linuxr   r   rC   rC   rD   is_linux9  r   zMachineInfo.is_linuxc                 C  s
   | j dv S )z4
        Machine is Darwin (iOS/tvOS/OS X)?
        >   darwinZiosZtvosr   r   rC   rC   rD   	is_darwin?  r   zMachineInfo.is_darwinc                 C  r   )z%
        Machine is Android?
        androidr   r   rC   rC   rD   
is_androidE  r   zMachineInfo.is_androidc                 C  r   )z#
        Machine is Haiku?
        haikur   r   rC   rC   rD   is_haikuK  r   zMachineInfo.is_haikuc                 C  r   )z$
        Machine is NetBSD?
        netbsdr   r   rC   rC   rD   	is_netbsdQ  r   zMachineInfo.is_netbsdc                 C  r   )z%
        Machine is OpenBSD?
        openbsdr   r   rC   rC   rD   
is_openbsdW  r   zMachineInfo.is_openbsdc                 C  r   )zMachine is DragonflyBSD?	dragonflyr   r   rC   rC   rD   is_dragonflybsd]     
zMachineInfo.is_dragonflybsdc                 C  r   )zMachine is FreeBSD?freebsdr   r   rC   rC   rD   
is_freebsda  r   zMachineInfo.is_freebsdc                 C  r   )zMachine is illumos or Solaris?sunosr   r   rC   rC   rD   is_sunose  r   zMachineInfo.is_sunosc                 C  r   )z&
        Machine is GNU/Hurd?
        gnur   r   rC   rC   rD   is_hurdi  r   zMachineInfo.is_hurdc                 C  r   )z!
        Machine is aix?
        aixr   r   rC   rC   rD   is_aixo  r   zMachineInfo.is_aixc                 C  s   | j dS )zMachine is IRIX?irix)r   
startswithr   rC   rC   rD   is_irixu  s   zMachineInfo.is_irixc                 C  s   |   s|  r
dS dS )Nexe r   r   r   rC   rC   rD   get_exe_suffix|  s   zMachineInfo.get_exe_suffixc                 C  s   |   rdS dS )Nobjo)r   r   rC   rC   rD   get_object_suffix  s   zMachineInfo.get_object_suffixc                 C  s   |   p|  S rH   r   r   rC   rC   rD   libdir_layout_is_win  r   z MachineInfo.libdir_layout_is_winN)rN   r   )rN   rM   )r   r   rN   r   r   )r?   r@   rA   __annotations__r   r   classmethodr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rC   rC   rC   rD   r     s8   
 

















r   c                   @  s\   e Zd Z	ddddZeddd	Zedd
dZedddZedddZ	dddZ
dS )BinaryTableNbinaries2T.Optional[T.Dict[str, T.Union[str, T.List[str]]]]c                 C  s   i | _ |rY| D ]\}}t|ttfs td|d|dt|| j |< q	d| j v r[d| j vrCtj	ddd | j d | j d< n| j d | j d krRtd		 | j d= d S d S d S )
NzInvalid type z for entry z in cross file	pkgconfigr7   zF"pkgconfig" entry is deprecated and should be replaced by "pkg-config"F)fatalzAMismatched pkgconfig and pkg-config binaries in the machine file.)
r   itemsrT   rU   rM   r   MesonExceptionrb   r	   deprecation)rJ   r   namecommandrC   rC   rD   rK     s$   


zBinaryTable.__init__rN   r|   c                	   C  >   zt jddgt jt jd W dgS  tt jfy   g  Y S w )Nccache	--versionstdoutstderr
subprocess
check_callPIPEOSErrorCalledProcessErrorrC   rC   rC   rD   detect_ccache     zBinaryTable.detect_ccachec                	   C  r   )Nsccacher   r   r   rC   rC   rC   rD   detect_sccache  r   zBinaryTable.detect_sccachec                  C  s   t  } | r| S t  S rH   )r   r   r   )cacherC   rC   rD   detect_compiler_cache  s   z!BinaryTable.detect_compiler_cacheentryrS   !T.Tuple[T.List[str], T.List[str]]c                 C  sf   t |}|d dkr|dd  }|  }||fS |d dkr-|dd  }|  }||fS g }||fS )Nr   r   r   r   )r   stringlistifyr   r   )r   r   compilerr   rC   rC   rD   parse_entry  s   
zBinaryTable.parse_entryr   rM   ra   c                 C  s(   | j |}|s
dS |d  sdS |S )zLookup binary in cross/native file and fallback to environment.

        Returns command with args as list if found, Returns `None` if nothing is
        found.
        Nr   )r   r\   r2   )rJ   r   r   rC   rC   rD   lookup_entry  s   zBinaryTable.lookup_entryrH   )r   r   r   )r   rS   rN   r   )r   rM   rN   ra   )r?   r@   rA   rK   staticmethodr   r   r   r   r   r   rC   rC   rC   rD   r     s    r   c                   @  s"   e Zd ZddddZdd	d
ZdS )CMakeVariablesN	variablesT.Optional[T.Dict[str, T.Any]]rN   r   c              
   C  sn   |pi }i | _ | D ])\}}t|}|D ]}t|ts.td| d| dt|j dq|| j |< qd S )NzValue 'z' of CMake variable 'z!' defined in a machine file is a z and not a str)	r   r   r   rb   rT   rM   r   r   r?   )rJ   r   r   rp   rV   rC   rC   rD   rK     s   

"zCMakeVariables.__init__T.Dict[str, T.List[str]]c                 C  s   | j S rH   )r   r   rC   rC   rD   get_variables  s   zCMakeVariables.get_variablesrH   )r   r   rN   r   )rN   r   )r?   r@   rA   rK   r   rC   rC   rC   rD   r     s    r   )
__future__r   dataclassesr   r   typingrx   enumr   r   r   r   r   r	   pathlibr
   r   r   r+   r   r:   ZENV_VAR_PROG_MAPr;   r<   rE   r   r   r   rC   rC   rC   rD   <module>   s   (	
	
h P