
    e<                       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\e      Z G d] d^      Z ed_`       G da dbe             Z G dc dd      Z G de df      Zy)g    )annotations)	dataclassN)Enum   )mesonlib)EnvironmentExceptionHoldableObject)mlog)Path)#aarch64alphaarcarmavrc2000cskydspice2kft32ia64loongarch64m68k
microblazemipsmips64msp430pariscpic24ppcppc64riscv32riscv64rl78rxs390s390xsh4sparcsparc64sw_64wasm32wasm64x86x86_64)r   r   r   r   r   r    r"   r&   r)   r*   r,   r.   cCCcppCXXcsCSCdDCfortranFCobjcOBJCobjcppOBJCXXrustRUSTCvalaVALACnasmNASMc_ldCC_LDcpp_ldCXX_LDd_ldDC_LD
fortran_ldFC_LDobjc_ldOBJC_LD	objcpp_ld	OBJCXX_LDrust_ldRUSTC_LDzT.Mapping[str, str]ENV_VAR_COMPILER_MAParARasASldLDnmNMobjcopyOBJCOPYobjdumpOBJDUMPranlibRANLIBreadelfREADELFsizeSIZEstringsSTRINGSstripSTRIPwindresWINDREScmakeCMAKEqmakeQMAKE
pkg-config
PKG_CONFIGmakeMAKEvapigenVAPIGENzllvm-configLLVM_CONFIGENV_VAR_TOOL_MAPD_LDF_LDRUST_LD	OBJCPP_LD)rG   rI   rO   rM   DEPRECATED_ENV_PROG_MAPc                      e Zd ZdZdZdZy)CMakeSkipCompilerTestalwaysneverdep_onlyN)__name__
__module____qualname__ALWAYSNEVERDEP_ONLY     6/usr/lib/python3/dist-packages/mesonbuild/envconfig.pyr|   r|      s    FEHr   r|   c                      e Zd Z	 d	 ddZddZddZddZddZddZddZ	dd	Z
dd
ZddZddZddZddZddZddZdddZy) 
PropertiesNc                    |xs i | _         y N
properties)selfr   s     r   __init__zProperties.__init__   s     %*r   c                $    |dz   | j                   v S N_stdlibr   )r   languages     r   
has_stdlibzProperties.has_stdlib   s    )#t66r   c                    | j                   |dz      }t        |t              r|S t        |t              sJ |D ]  }t        |t              rJ  |S r   )r   
isinstancestrlist)r   r   stdlibis       r   
get_stdlibzProperties.get_stdlib   sX    I!56fc"M&$''' 	&Aa%%%	&r   c                f    | j                   j                  dd       }|t        |t              sJ |S )Nrootr   getr   r   )r   r   s     r   get_rootzProperties.get_root   s1    ""640|z$444r   c                f    | j                   j                  dd       }|t        |t              sJ |S )Nsys_rootr   )r   r   s     r   get_sys_rootzProperties.get_sys_root   s2    ??&&z48:h#<<<r   c                    | j                   j                  dd       }||S t        j                  |      }|D ]  }t	        |t
              rJ  |S )Npkg_config_libdir)r   r   r   listifyr   r   )r   presr   s       r   get_pkg_config_libdirz Properties.get_pkg_config_libdir   sW    OO 3T:9Hq! 	&Aa%%%	&
r   c                f    d| j                   vry| j                   d   }t        |t              sJ |S )Ncmake_defaultsTr   r   boolr   r   s     r   get_cmake_defaultszProperties.get_cmake_defaults   s5    4??2oo./#t$$$
r   c                    d| j                   vry | j                   d   }t        |t              sJ t        |      }|j	                         st        d| d      |S )Ncmake_toolchain_filezcmake_toolchain_file (z) is not absolute)r   r   r   r   is_absoluter   )r   rawr   s      r   get_cmake_toolchain_filez#Properties.get_cmake_toolchain_file   sb    !8oo45#s####Cy#//1&)?uDU'VWW##r   c           
     ,   d| j                   vrt        j                  S | j                   d   }t        |t              sJ 	 t        |      S # t
        $ r> t        dj                  |t        D cg c]  }|j                   nc c}w c}            w xY w)Ncmake_skip_compiler_testzO"{}" is not a valid value for cmake_skip_compiler_test. Supported values are {})	r   r|   r   r   r   
ValueErrorr   formatvalue)r   r   es      r   get_cmake_skip_compiler_testz'Properties.get_cmake_skip_compiler_test   s    %T__<(111oo89#s###	H(-- 	H&a/DE!aggEEFH H	Hs   
A "B.BBc                f    d| j                   vry| j                   d   }t        |t              sJ |S )Ncmake_use_exe_wrapperTr   r   s     r   get_cmake_use_exe_wrapperz$Properties.get_cmake_use_exe_wrapper   s5    "$//9oo56#t$$$
r   c                ~    t        j                  d| j                  j                  d            }|rt	        |      S d S )NT.Optional[str]	java_home)Tcastr   r   r   r   r   s     r   get_java_homezProperties.get_java_home   s3    ($//*=*=k*JK#tE{--r   c                    t        j                  | j                  j                  dg             }t	        d |D              st        d      t        j                  d|      S )Nbindgen_clang_argumentsc              3  <   K   | ]  }t        |t                y wr   )r   r   ).0vs     r   	<genexpr>z4Properties.get_bindgen_clang_args.<locals>.<genexpr>   s     5!:a%5s   z?bindgen_clang_arguments must be a string or an array of stringsT.List[str])r   r   r   r   allr   r   r   r   s     r   get_bindgen_clang_argsz!Properties.get_bindgen_clang_args   sP      !4!45NPR!ST5u55&'hiivvmU++r   c                j    t        |t        |             r| j                  |j                  k(  S t        S r   )r   typer   NotImplemented)r   others     r   __eq__zProperties.__eq__   s+    eT$Z(??e&6&666r   c                     | j                   |   S r   r   )r   keys     r   __getitem__zProperties.__getitem__   s    s##r   c                    || j                   v S r   r   )r   items     r   __contains__zProperties.__contains__  s    t&&r   c                :    | j                   j                  ||      S r   )r   r   )r   r   defaults      r   r   zProperties.get  s    ""300r   r   )r   zIT.Optional[T.Dict[str, T.Optional[T.Union[str, bool, int, T.List[str]]]]])r   r   returnr   )r   r   r   T.Union[str, T.List[str]])r   r   )r   T.Optional[T.List[str]]r   r   )r   zT.Optional[Path])r   r|   r   r   )r   objectr   r   )r   r   r   0T.Optional[T.Union[str, bool, int, T.List[str]]])r   z$T.Union[str, bool, int, T.List[str]]r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      sb     ei+a+7

$
H.,$'1r   r   T)unsafe_hashc                      e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   dd	Zdd
Zed d       Zd!dZd!dZ	d!dZ
d!dZd!dZd!dZd!dZd!dZd!dZd!dZd!dZd!dZd!dZd!dZddZddZd!dZy)"MachineInfor   system
cpu_familycpuendianr   kernel	subsystemc                2    | j                   t        v | _        y r   )r   CPU_FAMILIES_64_BIT	is_64_bitr   s    r   __post_init__zMachineInfo.__post_init__  s    #2EEr   c                V    d| j                    d| j                   d| j                   dS )Nz<MachineInfo:  z (z)>)r   r   r   r   s    r   __repr__zMachineInfo.__repr__  s*    }Adoo->b
"MMr   c           	        h d}t        |      |k  r-t        d| ddj                  |t        |      z
        z         |d   }|t        vrt	        j
                  d| d       |d   }|d	vrt	        j
                  d
|        |d   }|j                  dd       }|j                  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   r   known_cpu_familiesr
   warningr   )clsliteralminimum_literalr   r   r   r   r   s           r   from_literalzMachineInfo.from_literal  s    Cw</)&,WIR8$++Oc'l,JKLM M \*
//LL.zl  ;A  B  C"**LL?6(34"Xt,KKT2	6:wu~vvyQQr   c                     | j                   dk(  S )z%
        Machine is windows?
        windowsr   r   s    r   
is_windowszMachineInfo.is_windows-       {{i''r   c                     | j                   dk(  S )z$
        Machine is cygwin?
        cygwinr  r   s    r   	is_cygwinzMachineInfo.is_cygwin3       {{h&&r   c                     | j                   dk(  S )z#
        Machine is linux?
        linuxr  r   s    r   is_linuxzMachineInfo.is_linux9       {{g%%r   c                    | j                   dv S )z4
        Machine is Darwin (iOS/tvOS/OS X)?
        >   iostvosdarwinr  r   s    r   	is_darwinzMachineInfo.is_darwin?  s     {{777r   c                     | j                   dk(  S )z%
        Machine is Android?
        androidr  r   s    r   
is_androidzMachineInfo.is_androidE  r  r   c                     | j                   dk(  S )z#
        Machine is Haiku?
        haikur  r   s    r   is_haikuzMachineInfo.is_haikuK  r  r   c                     | j                   dk(  S )z$
        Machine is NetBSD?
        netbsdr  r   s    r   	is_netbsdzMachineInfo.is_netbsdQ  r  r   c                     | j                   dk(  S )z%
        Machine is OpenBSD?
        openbsdr  r   s    r   
is_openbsdzMachineInfo.is_openbsdW  r  r   c                     | j                   dk(  S )zMachine is DragonflyBSD?	dragonflyr  r   s    r   is_dragonflybsdzMachineInfo.is_dragonflybsd]  s    {{k))r   c                     | j                   dk(  S )zMachine is FreeBSD?freebsdr  r   s    r   
is_freebsdzMachineInfo.is_freebsda  s    {{i''r   c                     | j                   dk(  S )zMachine is illumos or Solaris?sunosr  r   s    r   is_sunoszMachineInfo.is_sunose  s    {{g%%r   c                     | j                   dk(  S )z&
        Machine is GNU/Hurd?
        gnur  r   s    r   is_hurdzMachineInfo.is_hurdi       {{e##r   c                     | j                   dk(  S )z!
        Machine is aix?
        aixr  r   s    r   is_aixzMachineInfo.is_aixo  r*  r   c                8    | j                   j                  d      S )zMachine is IRIX?irix)r   
startswithr   s    r   is_irixzMachineInfo.is_irixu  s    {{%%f--r   c                F    | j                         s| j                         ryy)Nexe r  r  r   s    r   get_exe_suffixzMachineInfo.get_exe_suffix|  s    ?? 0r   c                &    | j                         ryy)Nobjo)r  r   s    r   get_object_suffixzMachineInfo.get_object_suffix  s    ??r   c                F    | j                         xs | j                         S r   r5  r   s    r   libdir_layout_is_winz MachineInfo.libdir_layout_is_win  s     4DNN$44r   N)r   None)r   r   )r   zT.Dict[str, str]r   z'MachineInfo'r   )r   r   r   __annotations__r   r   classmethodr   r  r  r  r  r  r  r  r  r   r#  r&  r)  r-  r1  r6  r:  r<  r   r   r   r   r     s    KO	HKFN R R*('&8(&'(*(&$$.5r   r   c                  j    e Zd Z	 d	 d	dZed
d       Zed
d       Zed
d       Zedd       Z	ddZ
y)BinaryTableNc                   i | _         |r |j                         D ]Y  \  }}t        |t        t        f      st        j                  d|d|d      t        j                  |      | j                   |<   [ d| j                   v rd| j                   vr4t        j                  dd       | j                   d   | j                   d<   n5| j                   d   | j                   d   k7  rt        j                  d	      	 | j                   d= y y y )
NzInvalid type z for entry z in cross file	pkgconfigrn   zF"pkgconfig" entry is deprecated and should be replaced by "pkg-config"F)fatalzAMismatched pkgconfig and pkg-config binaries in the machine file.)
binariesitemsr   r   r   r   MesonExceptionr   r
   deprecation)r   rE  namecommands       r   r   zBinaryTable.__init__  s    35!)!1 @g!'D#;7"11'{+dX^TV V&.&6&6w&?d#	@
 dmm+t}}4$$%muz{26--2LDMM,/]];/4==3NN"112uvv MM+. , r   c                     	 t        j                  ddgt         j                  t         j                         dgS # t        t         j                  f$ r g cY S w xY w)Nccache	--versionstdoutstderr
subprocess
check_callPIPEOSErrorCalledProcessErrorr   r   r   detect_ccachezBinaryTable.detect_ccache  sT    	!!8["9*//ZdZiZij z 667 	I	   6; AAc                     	 t        j                  ddgt         j                  t         j                         dgS # t        t         j                  f$ r g cY S w xY w)NsccacherM  rN  rQ  r   r   r   detect_sccachezBinaryTable.detect_sccache  sT    	!!9k"::??[e[j[jk { 667 	I	rX  c                 Z    t         j                         } | r| S t         j                         S r   )rA  r[  rW  )caches    r   detect_compiler_cachez!BinaryTable.detect_compiler_cache  s)     **,L((**r   c                    t        j                  |      }|d   dk(  r|dd  }| j                         }||fS |d   dk(  r|dd  }| j                         }||fS g }||fS )Nr   rL  r   rZ  )r   stringlistifyrW  r[  )r   entrycompilerrL  s       r   parse_entryzBinaryTable.parse_entry  s    ))%0A;("|H&&(F  a[I%|H'')F  Fr   c                j    | j                   j                  |      }|sy|d   j                         sy|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   )rE  r   rf   )r   rI  rJ  s      r   lookup_entryzBinaryTable.lookup_entry  s6     --##D)!!#r   r   )rE  z2T.Optional[T.Dict[str, T.Union[str, T.List[str]]]]r   )ra  r   r   z!T.Tuple[T.List[str], T.List[str]])rI  r   r   r   )r   r   r   r   staticmethodrW  r[  r^  r?  rc  re  r   r   r   rA  rA    sk     LP/H/4     + +    r   rA  c                      e Zd ZdddZddZy)CMakeVariablesNc                   |xs i }i | _         |j                         D ]h  \  }}t        j                  |      }|D ]:  }t	        |t
              rt        d| d| dt        |      j                   d       || j                   |<   j y )NzValue 'z' of CMake variable 'z!' defined in a machine file is a z and not a str)		variablesrF  r   r   r   r   r   r   r   )r   rj  r   r   r   s        r   r   zCMakeVariables.__init__  s    O	35#//+ 	(JC$$U+E Y!!S).;PQTPUUvw{|}w~  xH  xH  wI  IW  0X  Y  YY #(DNN3	(r   c                    | j                   S r   )rj  r   s    r   get_variableszCMakeVariables.get_variables  s    ~~r   r   )rj  zT.Optional[T.Dict[str, T.Any]]r   r=  )r   zT.Dict[str, T.List[str]])r   r   r   r   rl  r   r   r   rh  rh    s    	(r   rh  )
__future__r   dataclassesr   rR  typingr   enumr   r4  r   r   r	   r
   pathlibr   r   r   rQ   r>  ru   ENV_VAR_PROG_MAPrz   r|   r   r   rA  rh  r   r   r   <module>rs     sz   # !     :   $ P  -- 
5- 	%	-
 - t- F- h- G- G- F- G- h-  G!-" '#-$ y%-& '-( z)- ) 0)$) 	$) 	$	)
 	$) y) y) h) y) F) y) W) y)  W!)" W#)$ ,%)& F')( y))* =+) % 0 @*?.>? 
 	0 , D 
f1 f1P t@5. @5 @5DN N` r   