
    <hD                       S SK Jr  S SKJrJr  S SKrS SKrS SKrS SKrS SK	r	S SK
rSSKJr  SSKJr  SSKJr  SSKJr  \R&                  (       a  S SKrS+S	 jr\ " S
 S5      5       rS,S jrS-S jrS.S jrSSSS.rSS0rSSS.rSS0rSSS.rS/S jrS0S jr S1S jr!S2S jr"S3S jr#S4S jr$S5S6S  jjr%S5S7S! jjr&S5S8S" jjr'S5S8S# jjr(S9S$ jr)S2S% jr*S:S& jr+S.S' jr,S.S( jr-S2S) jr.S;S* jr/g)<    )annotations)	dataclassfieldN   )	envconfig)mlog)	compilers)defaultsc                   U R                  SS SS9  U R                  SSSS9  U R                  SSS	S
S9  U R                  SSSSS9  U R                  SSSSS9  U R                  SSSSS9  U R                  SS SS9  U R                  SS SS9  U R                  SS SS9  U R                  SS SS9  U R                  SS SS9  U R                  SS S!S /S"S#9  g )$Nz	--debarchz"The dpkg architecture to generate.)defaulthelpz--gccsuffix z-A particular gcc version suffix if necessary.z-oToutfilezThe output file.)requireddestr   z--crossF
store_truez"Generate a cross compilation file.)r   actionr   z--nativez#Generate a native compilation file.z--use-for-buildzUse _FOR_BUILD envvars.z--systemz$Define system for cross compilation.z--subsystemz'Define subsystem for cross compilation.z--kernelz$Define kernel for cross compilation.z--cpuz!Define cpu for cross compilation.z--cpu-familyz(Define cpu family for cross compilation.z--endianlittlebigz(Define endianness for cross compilation.)r   choicesr   )add_argument)parsers    }/mnt/mint/home/seanl/mnt/public/Repos/ladybird/Build/vcpkg/downloads/tools/meson-1.9.0-d1fcc2/mesonbuild/scripts/env2mfile.pyadd_argumentsr      sT   
TA  C
rL  N
t)/  1
	5A  C

E,B  D
)56  8

DC  E
tF  H

DC  E
@  B
G  I

Huh>OG  I    c                      \ rS rSr% \" \S9rS\S'   \" \S9rS\S'   \" \S9r	S\S'   \" \S9r
S\S'   \" \S9rS\S	'   \" \S9rS\S
'   SrS\S'   SrS\S'   SrS\S'   SrS\S'   SrS\S'   SrS\S'   Srg)MachineInfo/   )default_factoryzT.Dict[str, T.List[str]]r	   binariesz&T.Dict[str, T.Union[str, T.List[str]]]
propertiescompile_args	link_argscmakeNzT.Optional[str]system	subsystemkernelcpu
cpu_familyendian )__name__
__module____qualname____firstlineno__r   dictr	   __annotations__r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   __static_attributes__r+   r   r   r   r   /   s    */*EI'E).t)DH&D9>t9TJ6T-24-HL*H*/*EI'E49$4OE1O"FO"!%I%"FO"C"&J&"FO"r   r   c                @   [         R                  R                  U 5      (       a  U /$ [         R                  " 5        HQ  n[         R                  R	                  X5      n[         R
                  " U[         R                  5      (       d  MN  U/s  $    [        SU -  5      e)Nz%s not found on $PATH)ospathisabsget_exec_pathjoinaccessX_OK
ValueError)programdfs      r   locate_pathr?   J   sq    	ww}}WyGGLL$99Q  3J   ,w6
77r   c                    [        U5      S:X  a  g [        U[        5      (       a  US-   U-   S-   nO%US-   nUSR                  S U 5       5      -  nUS-  nU R	                  U5        g )Nr   z= ''
z = [z, c              3  2   #    U  H  nS U-   S -   v   M     g7f)'Nr+   ).0is     r   	<genexpr>"write_args_line.<locals>.<genexpr>Z   s     6A#'C-s   z]
)len
isinstancestrr8   write)ofilenameargsostrs       r   write_args_linerP   S   sg    
4yA~$e|d"U*f}		6666	KKr   c                   [         R                  " [        R                  R	                  SS5      5      n[         R                  " [        R                  R	                  SS5      5      n[         R                  " [        R                  R	                  SS5      5      n[         R                  " [        R                  R	                  SS5      5      n[         R                  " [        R                  R	                  SS5      5      n[         R                  " [        R                  R	                  SS5      5      nX-   nX-   nX&-   n	X6-   n
X-   nX-   nXF-   nXV-   nU(       a  XpR
                  S'   U	(       a  XR                  S'   U(       a  XR
                  S	'   U
(       a  XR                  S	'   U(       a  XR
                  S
'   U(       a  XR                  S
'   U(       a  XR
                  S'   U(       a  XR                  S'   g g )NCPPFLAGSr   CFLAGSCXXFLAGS	OBJCFLAGSOBJCXXFLAGSLDFLAGSccppobjcobjcpp)shlexsplitr4   environgetr"   r#   )infoscppflagscflagscxxflags	objcflagsobjcxxflagsldflagsc_argscpp_argsc_link_argscpp_link_args	objc_argsobjcpp_argsobjc_link_argsobjcpp_link_argss                  r   get_args_from_envvarsro   ^   sv   {{2::>>*b9:H[["56F{{2::>>*b9:HBJJNN;;<I++bjjnn]B?@Kkk"**..B78GF"H"K&M$I(K(N","(3*$,5!!.%.6""0'28$$4! r   mips64x86ppc64)mips64eli686powerpc64learmhfarm7hlf)rs   ru   hurdgnufreebsd)kfreebsdrx   c                $    U R                  X5      $ )zg
If name is a key in special_cases, replace it with the value, or otherwise
pass it through unchanged.
)r_   )special_casesrM   s     r   replace_special_casesr~      s    
 T((r   c                   SSSS.nSSSS.nU R                   S	   U R                  S
'    U R                   S   U R                  S'   X!S      U R                  S'   [        X1S   5      U R                  S'   g ! [         a     N<f = f)NLinuxkFreeBSDGNU)linuxr{   rx   armv7lrp   ppc64le)armrs   ru   rX   CMAKE_C_COMPILERrY   CMAKE_CXX_COMPILERDEB_HOST_ARCH_OSCMAKE_SYSTEM_NAMEDEB_HOST_GNU_CPUCMAKE_SYSTEM_PROCESSOR)r	   r$   KeyErrorr~   )r`   datasystem_name_mapsystem_processor_maps       r   deb_detect_cmaker      s     'ZOO#+R[\&+ooc&:EKK"#,1OOE,B() (7<N7O'PEKK#$,ABV]oXp,qEKK()  s   A6 6
BBc                    U H(  u  pEU SU U 3n [        U5      nXpR                  U'   M*     g ! [         a     M:  f = f)N-)r?   r	   r;   )r`   compilerstems	host_arch	gccsuffixlangnamestemcompilernameps           r   deb_compiler_lookupr      sQ    '#AdVI;7	L)A()OOH%	 (
  		s   0
>>c                    U R                   S:X  a  S/nOSSU R                   -   /n[        R                  " US[        R                  S9n[	        X 5      $ )Nautozdpkg-architecturez-aT)universal_newlinesstderr)debarch
subprocesscheck_outputDEVNULL!dpkg_architecture_to_machine_info)optionscmdoutputs      r   detect_cross_debianliker      sR    & "#"D7??$:;$$ST,6,>,>@F,V==r   c                `   0 nU R                  S5       H3  nUR                  5       nUS:X  a  M  UR                  SS5      u  pEXRU'   M5     US   n[        [        US   5      nUn[        [        US   5      n	[        [
        US   5      n
[        R                  US   [        [        US   5      5      nUS	   n/ S
Qn[        5       n[        XXaR                  5        [        UR                  5      S:X  a  [        S5        [        SU-  5      UR                   S'   [        SU-  5      UR                   S'   [        SU-  5      UR                   S'   [        SU-  5      UR                   S'    [        S5      UR                   S'   [#        X5        S H#  n [        U< SU< 35      UR                   U'   M%     S H&  u  nn [        U< SU< 35      UR                   U'   M(     S H&  u  nn [        U< SU< 35      UR                  U'   M(      [        S5      UR                   S'   X~l        Xl        Xl        Xl        Xl        Xl        [3        U5        U$ ! [$         a     Nf = f! [$         a     M  f = f! [$         a     M  f = f! [$         a     M  f = f! [$         a     Nf = f)N
r   =   DEB_HOST_GNU_TYPEr   r   DEB_HOST_ARCHDEB_HOST_ARCH_ENDIAN))rX   gcc)rY   zg++)rZ   gobjc)r[   zgobjc++r   z$Warning: no compilers were detected.z%s-ararz%s-stripstripz
%s-objcopyobjcopyz%s-ldldr$   )zg-ir-annotation-toolzg-ir-compilerzg-ir-doc-toolzg-ir-generatezg-ir-inspectzg-ir-scannerz
pkg-configr   ))exe_wrapperzcross-exe-wrapper))valavalaczcups-config)r]   r   r~   
deb_os_mapdeb_kernel_mapdeb_cpu_family_mapdeb_arch_cpu_mapr_   deb_cpu_mapr   r   r   rH   r	   printr?   r    r   r;   r%   r&   r'   r)   r(   r*   ro   )r   r   r   linekvr   host_oshost_subsystemhost_kernelhost_cpu_familyhost_cpuhost_endianr   r`   toolexes                    r   r   r      s   DT"zz|2:zz#q!Q # ()I#J5G0HIGN'=O8PQK+,>EW@XYO##D$9$9+tL^G_$`bH-.K,M MEi9J9JK
5??q 45&w':;ENN4)*y*@AENN7 +L9,D EENN9&w':;ENN4"-g"6w%	#.)T/J#KENN4 	c	#.)S/I#JENN4 		c	$/9c0J$KEOOD!	(3M(B}% L$OL&IL% LS    		  		  		  sZ   /#I I-I>0JJ  
I*)I*-
I;:I;>
JJ
JJ 
J-,J-c           	     n   US-   n[        USSS9 nUR                  S5        UR                  S5        [        U R                  R	                  5       5       H  nU R                  U   n[        XEU5        M      UR                  S5        UR                  S5        [        U R                  R	                  5       5       H  nU R                  U   n[        XGU5        M      UR                  S5        UR                  S	5        [        [        U R                  R	                  5       5      R                  [        U R                  R	                  5       5      5      5      n	U	R                  5         U	 H[  n
XR                  ;   a  [        XJS
-   U R                  U
   5        XR                  ;   d  M?  [        XJS-   U R                  U
   5        M]     UR                  S5        UR                  S5        U R                  R                  5        H  u  p[        XKU5        M     UR                  S5        U R                  (       aQ  UR                  S5        U R                  R                  5        H  u  p[        XKU5        M     UR                  S5        U(       a  UR                  S5        UR                  SU R                    S35        UR                  SU R"                   S35        UR                  SU R$                   S35        UR                  SU R&                   S35        U R(                  (       a  UR                  SU R(                   S35        U R*                  (       a  UR                  SU R*                   S35        S S S 5        [,        R.                  " X15        g ! , (       d  f       N%= f)N~wzutf-8)encodingz[binaries]
z# Compilers
r   z# Other binaries
z[built-in options]
_args
_link_argsz[properties]
z	[cmake]

z[host_machine]
zcpu = 'rA   zcpu_family = 'z
endian = 'z
system = 'zsubsystem = 'z
kernel = ')openrK   sortedr	   keysrP   r    listsetr"   unionr#   sortr!   itemsr$   r(   r)   r*   r%   r&   r'   r4   replace)r`   	ofilenamewrite_system_infotmpfilenamerL   r   compilerexenamer   	all_langslangr   r   s                r   write_machine_filer     s   c/K	k3	1UN#O$u3356Hx0HEX6 7 	D()enn1134G..)CEC0 5 	D*+U//4467==c%//BVBVBX>YZ[	D)))g~u7I7I$7OP&l':EOOD<QR	 
 	D$%$$**,DAEa( -D;;KK&))+!, ,KKKK*+KK'%))C01KK.)9)9(:#>?KK*U\\N#67KK*U\\N#67mEOO+<C@A||jc:;Y 
2\ JJ{&] 
2	1s   FN&/GN&&
N4c                6   / nU [         R                  ;   aH  [        R                  " [        R
                  R                  [         R                  U    U-   S5      5      nU [         R                  ;   aO  [        [        R                  " [        R
                  R                  SU-   S5      5      5      n[        U5      U-   nOUn/ nU [         R                  ;   a:  U[        R                  " [        R
                  R                  SU-   S5      5      -  nXR-  nXE4$ )Nr   rR   rW   )r	   CFLAGS_MAPPINGr\   r]   r4   r^   r_   LANGUAGES_USING_CPPFLAGStupler   LANGUAGES_USING_LDFLAGS)r   envvar_suffixr"   ra   lang_compile_argslang_link_argss         r   !detect_language_args_from_envvarsr   @  s    L9+++{{2::>>)2J2J82TWd2dfh#ij9555RZZ^^J4NPR%STU N\9(N9444%++bjjnnY5NPR&STT"N..r   c                   [        5       n[        R                  R                  5        H  u  p#[        R
                  R                  X0-   5      nU(       d  M/  [        R                  R                  U5      (       a  U/nO[        R                  " U5      nXQR                  U'   [        X 5      u  pgU(       a  XaR                  U'   U(       d  M  XqR                  U'   M     U$ N)r   r   ENV_VAR_COMPILER_MAPr   r4   r^   r_   r5   existsr\   r]   r	   r   r"   r#   )r   r`   r   
envvarnamecompilerstrr   r   r   s           r   detect_compilers_from_envvarsr   O  s    ME ) > > D D FjjnnZ%?@77>>+&&#}H{{;/H$,!,Mh,f)+<x(>(6OOH% !G Lr   c                    [         R                  R                  5        HT  u  p#X1-   n[        R                  R                  U5      nU(       d  M1  [        R                  " U5      U R                  U'   MV     g r   )	r   ENV_VAR_TOOL_MAPr   r4   r^   r_   r\   r]   r    )r`   r   binnameenvvar_baseenvvarbinstrs         r   detect_binaries_from_envvarsr   a  sU     ) : : @ @ B,'6&+kk&&9ENN7#	 !Cr   c                    [         R                  R                  SU-   5      nUb  X R                  S'   [         R                  R                  SU-   5      nUb  X R                  S'   g g )NPKG_CONFIG_LIBDIRpkg_config_libdirPKG_CONFIG_SYSROOT_DIRsys_root)r4   r^   r_   r!   )r`   r   vars      r   detect_properties_from_envvarsr   h  s^    
**..,}<
=C
03,-
**..1MA
BC
'*$ r   c           
         S Hd  n[        X5      nU(       dC  [        R                  " SU SUR                  SS5       S35        [        R
                  " S5        [        XU5        Mf     g )N)r%   r&   r'   r(   r)   r*   zCross property "z" missing, set it with --_r   .r   )getattrr   errorr   sysexitsetattr)r`   r   optnamer   s       r   detect_cross_systemr  p  s[    SG%JJ)'2KGOO\_adLeKffghiHHQK" Tr   c                    U R                   (       a  [        S5        [        U 5      nO [        S5        [        5       n[	        X5        [        U5        [        U5        U$ )Nz2Detecting cross environment via dpkg-architecture.z6Detecting cross environment via environment variables.)r   r   r   r   r  r   r   )r   r`   s     r   detect_cross_envr
  x  sJ    BC'0FG-/E+ '"5)Lr   c                   XR                   ;   a  g U Hi  n[        R                  " U5      nU(       d  M"  [        U5      u  pVU/U R                   U'   U(       a  XPR                  U'   U(       a  X`R
                  U'     g    g r   )r	   shutilwhichr   r"   r#   )r`   r   	exe_namesexe_namelookup	compflags	linkflagss          r   add_compiler_if_missingr    sm    ??"h'@J	%+H!+4x((1OOH% r   c                    [         R                  " 5        H'  u  pU[        R                  ;  a  M  [	        XU5        M)     g r   )compiler_namesr   r   r   r  )r`   r   exess      r   detect_missing_native_compilersr    s2    (..099996 1r   c                    [        [        R                  R                  5       5       HC  nXR                  ;   a  M  [
        R                  " U5      nU(       d  M3  U/U R                  U'   ME     g r   )r   r   r   r   r    r  r  )r`   toolnamer   s      r   detect_missing_native_binariesr    sP    955::<=~~%ll8$3(+uENN8$ >r   c                    U R                   (       a  [        R                  " S5        SnOSn[        U5      n[	        U5        [        X!5        [        U5        [        X!5        U$ )NzUUsing _FOR_BUILD envvars for detection (native file for use during cross compilation)
_FOR_BUILDr   )use_for_buildr   logr   r  r   r  r   )r   esuffixr`   s      r   detect_native_envr     sQ    hi)'2E#E* 0"5)"52Lr   c                   U R                   (       a'  U R                  (       a  [        R                  " S5        U R                   (       d'  U R                  (       d  [        R                  " S5        [        R
                  " S5        U R                   nU(       a5  U R                  (       a  [        R                  " S5        [        U 5      nSnO[        U 5      nSn[        X R                  U5        g )Nz:You can only specify either --cross or --native, not both.z%You must specify --cross or --native.z9This functionality is experimental and subject to change.z:--use-for-build only makes sense for --native, not --crossTF)crossnativer  r  r   noticer  r
  r   r   r   )r   detect_crossr`   r   s       r   runr&    s    }}MN==89KKKL==L  HHQR ) !'*!uoo/@Ar   )r   z'argparse.ArgumentParser'returnNone)r<   rJ   r'  T.List[str])rL   zT.TextIOrM   rJ   rN   zT.Union[str, T.List[str]]r'  r(  )r`   r   r'  r(  )r}   zT.Mapping[str, str]rM   rJ   r'  rJ   )r`   r   r   zT.Dict[str, str]r'  r(  )
r`   r   r   zT.List[T.Tuple[str, str]]r   rJ   r   rJ   r'  r(  )r   T.Anyr'  r   )r   rJ   r   r*  r'  r   )r`   r   r   rJ   r   boolr'  r(  )r   )r   rJ   r   rJ   r'  z!T.Tuple[T.List[str], T.List[str]])r   rJ   r'  r   )r`   r   r   rJ   r'  r(  )r`   r   r   r*  r'  r(  )r`   r   r   rJ   r  r)  r'  r(  )r   r*  r'  r(  )0
__future__r   dataclassesr   r   r  r4   r   r  r\   typingTr   r   r   r	   compilers.detectr
   r  TYPE_CHECKINGargparser   r   r?   rP   ro   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   <module>r3     s   # ( " "     ! 9??I4 # # #48	!5J   Y   E
 
)
r>IV0'd/$:+#
7-Br   