
    -PhD                       d dl mZ d dlmZ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mZ ddlmZ ddlmZ ddlmZ ej        rd dlZdKdZe G d d                      ZdLdZdMdZdNdZddddZd d!iZddd"Zd#d$iZd%d$d&ZdOd)ZdPd,Z dQd1Z!dRd4Z"dSd6Z#dTd:Z$dUdVd?Z%dUdWd@Z&dUdXdAZ'dUdXdBZ(dYdCZ)dRdDZ*dZdFZ+dNdGZ,dNdHZ-dRdIZ.d[dJZ/dS )\    )annotations)	dataclassfieldN   )	envconfig)mlog)	compilers)defaultsparser'argparse.ArgumentParser'returnNonec                T   |                      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           |                      dd d           |                      dd d!d gd"#           d S )$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)r   s    \/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mesonbuild/scripts/env2mfile.pyadd_argumentsr      s   
TA  C C C
rL  N N N
t)/  1 1 1
	5A  C C C

E,B  D D D
)56  8 8 8

DC  E E E
tF  H H H

DC  E E E
@  B B B
G  I I I

Huh>OG  I I I I I    c                  0   e Zd ZU  ee          Zded<    ee          Zded<    ee          Zded<    ee          Z	ded<    ee          Z
ded<    ee          Zded	<   d
Zded<   d
Zded<   d
Zded<   d
Zded<   d
Zded<   d
Zded<   d
S )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__r   dictr	   __annotations__r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,    r   r   r    r    /   s,        */%*E*E*EIEEEE).t)D)D)DHDDDD9>t9T9T9TJTTTT-2U4-H-H-HLHHHH*/%*E*E*EIEEEE49E$4O4O4OEOOOO"F""""!%I%%%%"F""""C"&J&&&&"F""""""r   r    programstrT.List[str]c                   t           j                            |           r| gS t          j                    D ]F}t           j                            ||           }t          j        |t           j                  r|gc S Gt          d| z            )Nz%s not found on $PATH)ospathisabsget_exec_pathjoinaccessX_OK
ValueError)r3   dfs      r   locate_pathrA   J   s    	w}}W y  GLLG$$9Q   	3JJJ	
,w6
7
77r   ofileT.TextIOnameargsT.Union[str, T.List[str]]c                    t          |          dk    rd S t          |t                    r|dz   |z   dz   }n,|dz   }|d                    d |D                       z  }|dz  }|                     |           d S )Nr   z= ''
z = [z, c              3  &   K   | ]}d |z   d z   V  dS )'Nr2   ).0is     r   	<genexpr>z"write_args_line.<locals>.<genexpr>Z   s*      66A#'C-666666r   z]
)len
isinstancer4   r;   write)rB   rD   rE   ostrs       r   write_args_linerR   S   s    
4yyA~~$ e|d"U*f}		66666666	KKr   infosc                r   t          j        t          j                            dd                    }t          j        t          j                            dd                    }t          j        t          j                            dd                    }t          j        t          j                            dd                    }t          j        t          j                            dd                    }t          j        t          j                            dd                    }||z   }||z   }||z   }	||z   }
||z   }||z   }||z   }||z   }|r
|| j        d<   |	r
|	| j        d<   |r
|| j        d	<   |
r
|
| j        d	<   |r
|| j        d
<   |r
|| j        d
<   |r
|| j        d<   |r|| j        d<   d S d S )NCPPFLAGSr   CFLAGSCXXFLAGS	OBJCFLAGSOBJCXXFLAGSLDFLAGSccppobjcobjcpp)shlexsplitr7   environgetr$   r%   )rS   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_envvarsrq   ^   s   {2:>>*b99::H["5566F{2:>>*b99::HBJNN;;;<<I+bjnn]B??@@Kk"*..B7788GF("H7"Kw&M9$I[(K(N"W, )"(3 +* -$,5! /!. /%.6" 1"0 3'28$ 5$4!!!5 5r   mips64x86ppc64)mips64eli686powerpc64learmhfarm7hlf)ru   rw   hurdgnufreebsd)kfreebsdrz   special_casesT.Mapping[str, str]c                .    |                      ||          S )zs
    If name is a key in special_cases, replace it with the value, or otherwise
    pass it through unchanged.
    )rb   )r~   rD   s     r   replace_special_casesr      s    
 T4(((r   dataT.Dict[str, str]c                    dddd}dddd}| j         d	         | j        d
<   	 | j         d         | j        d<   n# t          $ r Y nw xY w||d                  | j        d<   t          ||d                   | j        d<   d S )NLinuxkFreeBSDGNU)linuxr}   rz   armv7lrr   ppc64le)armru   rw   r[   CMAKE_C_COMPILERr\   CMAKE_CXX_COMPILERDEB_HOST_ARCH_OSCMAKE_SYSTEM_NAMEDEB_HOST_GNU_CPUCMAKE_SYSTEM_PROCESSOR)r	   r&   KeyErrorr   )rS   r   system_name_mapsystem_processor_maps       r   deb_detect_cmaker      s     'ZOOO#+R[\\&+oc&:EK"#,1OE,B())   '6t<N7O'PEK#$,ABVX\]oXp,q,qEK()))s   9 
AAcompilerstemsT.List[T.Tuple[str, str]]	host_arch	gccsuffixc                |    |D ]8\  }}| d| | }	 t          |          }|| j        |<   )# t          $ r Y 5w xY wd S )N-)rA   r	   r>   )rS   r   r   r   langnamestemcompilernameps           r   deb_compiler_lookupr      sx    '  $#77d7I77	L))A()EOH%% 	 	 	D	 s   ,
99optionsT.Anyc                    | j         dk    rdg}ndd| j         z   g}t          j        |dt          j                  }t	          ||           S )Nautozdpkg-architecturez-aT)universal_newlinesstderr)debarch
subprocesscheck_outputDEVNULL!dpkg_architecture_to_machine_info)r   cmdoutputs      r   detect_cross_debianliker      s^    &  "#"D7?$:;$ST,6,>@ @ @F,VW===r   r   c                   i }|                      d          D ];}|                                }|dk    r|                     dd          \  }}|||<   <|d         }t          t          |d                   }|}t          t          |d                   }	t          t
          |d                   }
t                              |d         t          t          |d                             }|d	         }g d
}t                      }t          ||||j                   t          |j                  dk    rt          d           t          d|z            |j        d<   t          d|z            |j        d<   t          d|z            |j        d<   t          d|z            |j        d<   	 t          d          |j        d<   t#          ||           n# t$          $ r Y nw xY wdD ]/}	 t          |d|          |j        |<    # t$          $ r Y ,w xY wdD ]2\  }}	 t          |d|          |j        |<   ## t$          $ r Y /w xY wdD ]2\  }}	 t          |d|          |j        |<   ## t$          $ r Y /w xY w	 t          d          |j        d<   n# t$          $ r Y nw xY w||_        ||_        |	|_        |
|_        ||_        ||_        t3          |           |S )N
r   =   DEB_HOST_GNU_TYPEr   r   DEB_HOST_ARCHDEB_HOST_ARCH_ENDIAN))r[   gcc)r\   zg++)r]   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_maprb   deb_cpu_mapr    r   r   rN   r	   printrA   r"   r   r>   r'   r(   r)   r+   r*   r,   rq   )r   r   r   linekvr   host_oshost_subsystemhost_kernelhost_cpu_familyhost_cpuhost_endianr   rS   toolexes                    r   r   r      sz   DT""  zz||2::zz#q!!1Q()I#J5G0HIIGN'=O8PQQK+,>EW@XYYO##D$9$9+tL^G_$`$`b bH-.K, , ,M MME}i9JKKK
5?q  4555&w':;;EN4)*y*@AAEN7 +L9,D E EEN9&w':;;EN4"-g"6"6w%%%%     	#.)))TT/J#K#KEN4   	 	 	D	  	c	#.)))SS/I#J#JEN4   	 	 	D	  	c	$/999cc0J$K$KEOD!! 	 	 	D	(3M(B(B}%%   EL$EOEL&EEIEL%   LsZ   *'G 
GG'H
HHH99
III..
I;:I;?J 
J$#J$	ofilenamewrite_system_infoboolc           	        |dz   }t          |dd          5 }|                    d           |                    d           t          | j                                                  D ] }| j        |         }t          |||           !|                    d           |                    d           t          | j                                                  D ] }| j        |         }t          |||           !|                    d           |                    d	           t          t          | j	                                                  
                    t          | j                                                                      }	|	                                 |	D ]R}
|
| j	        v rt          ||
d
z   | j	        |
                    |
| j        v rt          ||
dz   | j        |
                    S|                    d           |                    d           | j                                        D ]\  }}t          |||           |                    d           | j        rZ|                    d           | j                                        D ]\  }}t          |||           |                    d           |r|                    d           |                    d| j         d           |                    d| j         d           |                    d| j         d           |                    d| j         d           | j        r|                    d| j         d           | j        r|                    d| j         d           d d d            n# 1 swxY w Y   t-          j        ||           d S )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 = 'rH   zcpu_family = 'z
endian = 'z
system = 'zsubsystem = 'z
kernel = ')openrP   sortedr	   keysrR   r"   listsetr$   unionr%   sortr#   itemsr&   r*   r+   r,   r'   r(   r)   r7   replace)rS   r   r   tmpfilenamerB   r   compilerexenamer   	all_langslangr   r   s                r   write_machine_filer     s   c/K	k3	1	1	1 ,<UN###O$$$u335566 	7 	7Hx0HE8X6666D()))en113344 	1 	1G.)CE7C0000D*+++U/446677==c%/BVBVBXBX>Y>YZZ[[	 	S 	SDu)))tg~u7I$7OPPPu&&tl':EOD<QRRRD$%%%$**,, 	) 	)DAqE1a((((D; 	KK&&&))++ - -1q!,,,,KK 		<KK*+++KK0%)000111KK>)9>>>???KK6U\666777KK6U\666777 B@EO@@@AAA| <::::;;;Y,< ,< ,< ,< ,< ,< ,< ,< ,< ,< ,< ,< ,< ,< ,<\ J{I&&&&&s   N	N--N14N1r   r   envvar_suffix!T.Tuple[T.List[str], T.List[str]]c                   g }| t           j        v rEt          j        t          j                            t           j        |          |z   d                    }| t           j        v rUt          t          j        t          j                            d|z   d                              }t          |          |z   }n|}g }| t           j
        v r8|t          j        t          j                            d|z   d                    z  }||z  }||fS )Nr   rU   rZ   )r	   CFLAGS_MAPPINGr_   r`   r7   ra   rb   LANGUAGES_USING_CPPFLAGStupler   LANGUAGES_USING_LDFLAGS)r   r   r$   rc   lang_compile_argslang_link_argss         r   !detect_language_args_from_envvarsr   @  s    L9+++{2:>>)2J82TWd2dfh#i#ijj9555RZ^^J4NPR%S%STTUU NN\9(N9444%+bjnnY5NPR&S&STTTl"N~..r   c                   t                      }t          j                                        D ]\  }}t          j                            || z             }|s*t          j                            |          r|g}nt          j
        |          }||j        |<   t          ||           \  }}|r
||j        |<   |r
||j        |<   |S N)r    r   ENV_VAR_COMPILER_MAPr   r7   ra   rb   r8   existsr_   r`   r	   r   r$   r%   )r   rS   r   
envvarnamecompilerstrr   r   r   s           r   detect_compilers_from_envvarsr   O  s    MME ) > D D F F 7 7*jnnZ-%?@@ 	7>>+&& 	0#}HH{;//H$,!,MhXe,f,f)> 	=+<Ex( 	7(6EOH%Lr   c                    t           j                                        D ]G\  }}||z   }t          j                            |          }|rt          j        |          | j        |<   Hd S r   )	r   ENV_VAR_TOOL_MAPr   r7   ra   rb   r_   r`   r"   )rS   r   binnameenvvar_baseenvvarbinstrs         r   detect_binaries_from_envvarsr   a  sk     ) : @ @ B B : :},'' 	:&+k&&9&9EN7#	: :r   c                    t           j                            d|z             }|
|| j        d<   t           j                            d|z             }||| j        d<   d S d S )NPKG_CONFIG_LIBDIRpkg_config_libdirPKG_CONFIG_SYSROOT_DIRsys_root)r7   ra   rb   r#   )rS   r   vars      r   detect_properties_from_envvarsr  h  sf    
*..,}<
=
=C
03,-
*..1MA
B
BC
'*$$$ r   c           
         dD ]h}t          ||          }|sCt          j        d| d|                    dd           d           t	          j        d           t          | ||           id S )N)r'   r(   r)   r*   r+   r,   zCross property "z" missing, set it with --_r   .r   )getattrr   errorr   sysexitsetattr)rS   r   optnamer   s       r   detect_cross_systemr  p  s    S # #GW%% 	Jh'hhGOO\_adLeLehhhiiiHQKKKw""""# #r   c                    | j         rt          d           t          |           }n-t          d           t                      }t	          ||            t          |           t          |           |S )Nz2Detecting cross environment via dpkg-architecture.z6Detecting cross environment via environment variables.)r   r   r   r   r  r   r  )r   rS   s     r   detect_cross_envr  x  su     ,BCCC'00FGGG-//E7+++ '''"5)))Lr   	exe_namesc                    || j         v rd S |D ]P}t          j        |          }|st          |          \  }}|g| j         |<   |r
|| j        |<   |r
|| j        |<    d S d S r   )r	   shutilwhichr   r$   r%   )rS   r   r  exe_namelookup	compflags	linkflagss          r   add_compiler_if_missingr    s    5?"" 
 
h'' 	@JJ	9%+H! 	5+4Ex( 	2(1EOH%
 
r   c                x    t          j                    D ]%\  }}|t          j        vrt	          | ||           &d S r   )compiler_namesr   r   r   r  )rS   r   exess      r   detect_missing_native_compilersr    sN    (.00 7 7$9999x66667 7r   c                    t          t          j                                                  D ]-}|| j        v rt          j        |          }|r|g| j        |<   .d S r   )r   r   r   r   r"   r  r  )rS   toolnamer   s      r   detect_missing_native_binariesr"    sh    95::<<== - -u~%%l8$$ 	-(+uEN8$- -r   c                    | j         rt          j        d           d}nd}t          |          }t	          |           t          ||           t          |           t          ||           |S )NzUUsing _FOR_BUILD envvars for detection (native file for use during cross compilation)
_FOR_BUILDr   )use_for_buildr   logr   r  r   r"  r  )r   esuffixrS   s      r   detect_native_envr(    sx     hiii)'22E#E*** 000"5)))"5'222Lr   c                p   | j         r| j        rt          j        d           | j         s| j        st          j        d           t	          j        d           | j         }|r-| j        rt          j        d           t          |           }d}nt          |           }d}t          || j
        |           d S )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_crossrS   r   s       r   runr.    s    } O OMNNN= : :8999KKLLL=L "  	SHQRRR )) !'**!ugo/@AAAAAr   )r   r   r   r   )r3   r4   r   r5   )rB   rC   rD   r4   rE   rF   r   r   )rS   r    r   r   )r~   r   rD   r4   r   r4   )rS   r    r   r   r   r   )
rS   r    r   r   r   r4   r   r4   r   r   )r   r   r   r    )r   r4   r   r   r   r    )rS   r    r   r4   r   r   r   r   )r   )r   r4   r   r4   r   r   )r   r4   r   r    )rS   r    r   r4   r   r   )rS   r    r   r   r   r   )rS   r    r   r4   r  r5   r   r   )r   r   r   r   )0
__future__r   dataclassesr   r   r  r7   r   r  r_   typingTr   r   r   r	   compilers.detectr
   r  TYPE_CHECKINGargparser   r    rA   rR   rq   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r"  r(  r.  r2   r   r   <module>r6     s9   # " " " " " ( ( ( ( ( ( ( ( " " " " " " " " " " " " " " " "                  ! ! ! ! ! ! 9 9 9 9 9 9? OOOI I I I4 # # # # # # # #48 8 8 8	 	 	 	!5 !5 !5 !5J    Y    E
  
) ) ) )
r 
r 
r 
r   > > > >I I I IV0' 0' 0' 0'd/ / / / /    $: : : : :+ + + + +# # # #
 
 
 
   7 7 7 7- - - -   B B B B B Br   