
    <h                       S SK J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Jr  SSKJrJrJrJr  SS	KJrJr  SS
KJrJr  SSKJr  SSKJr  SSKJr  SSKJrJ r   SSK!J"r"J#r#  SSK$J%r%J&r&J'r'J(r(  SSK)J*r*J+r+  SSK,J-r-J.r.  SSK/J0r0  SSK1J2r2  SSK3J4r4  SSK5J6r6  SSK5J7r7J8r8  \Rr                  (       a-  SSKJ:r:  SSK;J<r<  SSK=J>r>  SSK?J@r@  SSKAJBrB  SSK
JCrC  SSKDJErE  \rFO\GrF/ SQrH\H\H V s/ s H  n S U SS  3PM     sn -  rH\H/ S!Q-  rHSWS" jrI " S# S$\\5      rJ " S% S&\F5      rK " S' S(\K\.\-\J5      rL " S) S*\L5      rM " S+ S,\\\L5      rN " S- S.\4\L5      rO " S/ S0\ \J5      rP " S1 S2\K\&\%\J5      rQ " S3 S4\2\J5      rR " S5 S6\2\J5      rS " S7 S8\0\J5      rT " S9 S:\*\J5      rU " S; S<\L5      rV " S= S>\F5      rW " S? S@\F5      rX " SA SB\X\W\"\J5      rY " SC SD\X\W\#\J5      rZ " SE SF\W\+\J5      r[ " SG SH\[5      r\ " SI SJ\\J5      r] " SK SL\\J5      r^ " SM SN\\J5      r_ " SO SP\_5      r` " SQ SR\_5      ra " SS ST\6\J5      rb " SU SV\6\J5      rcgs  sn f )X    )annotationsN   )options)mlog)MesonExceptionversion_compare   )gnu_winlibsmsvc_winlibsCompilerCompileCheckMode)CXX_FUNC_ATTRIBUTESC_FUNC_ATTRIBUTES)AppleCompilerMixinAppleCPPStdsMixin)CLikeCompiler)CcrxCompiler)
TICompiler)ArmCompilerArmclangCompiler)MSVCCompilerClangClCompiler)GnuCompiler
GnuCPPStdsgnu_common_warning_argsgnu_cpp_warning_args)IntelGnuLikeCompilerIntelVisualStudioLikeCompiler)ClangCompilerClangCPPStds)ElbrusCompiler)PGICompiler)EmscriptenMixin)MetrowerksCompiler)mwccarm_instruction_set_argsmwcceppc_instruction_set_args)MutableKeyedOptionDictType)
Dependency)MachineInfo)Environment)DynamicLinker)MachineChoice)BuildTarget)c++98c++0xc++03c++1yc++1zc++11c++14c++17c++2ac++20c++23c++26gnu)vc++11vc++14vc++17vc++20
vc++latest	c++latestc                t    U S:X  a  UR                  S5        g U S;   a  [        R                  " SU  S3SS9  g g )Nnone-fno-exceptions>   csz"non-MSVC compilers do not support z9 exception handling. You may want to set eh to 'default'.Ffatal)appendr   warning)ehargss     y/mnt/mint/home/seanl/mnt/public/Repos/ladybird/Build/vcpkg/downloads/tools/meson-1.9.0-d1fcc2/mesonbuild/compilers/cpp.pynon_msvc_eh_optionsrM   5   sD    	V|%&	z	9" >> >EJ	L 
    c                     ^  \ rS rSrSS jrSr  S     SS jjr\SS j5       rSS jr	SS jr
SS	 jrSU 4S
 jjrSSS.       SU 4S jjjrSS jr\R                   " 5       SS j5       rSU 4S jjrSrU =r$ )CPPCompiler<   c                z     [         R                  " U[        U   5      $ ! [         a    [	        SU S35      ef = f)NzUnknown function attribute "")r   getr   KeyErrorr   )selfnames     rL   attribute_check_func CPPCompiler.attribute_check_func=   sG    	I&**41B41HII 	I #?vQ!GHH	Is     :cppNc	                `    [         R                  " XX#XFXWUS9	  [        R                  " U 5        g )N)is_crosslinkerfull_version)r   __init__r   	rV   ccacheexelistversionfor_machiner\   infor]   r^   s	            rL   r_   CPPCompiler.__init__E   s.    
 	$+#+'3	5 	t$rN   c                    g)NzC++ )clss    rL   get_display_language CPPCompiler.get_display_languageO   s    rN   c                    S/$ )Nz-nostdinc++rh   rV   s    rL   get_no_stdinc_argsCPPCompiler.get_no_stdinc_argsS   
    rN   c                    S/$ )Nz-nostdlib++rh   rm   s    rL   get_no_stdlib_link_args#CPPCompiler.get_no_stdlib_link_argsV   rp   rN   c                ,    SnU R                  XSU5      $ )Nz2class breakCCompiler;int main(void) { return 0; }
zsanitycheckcpp.cc)_sanity_check_impl)rV   work_direnvironmentcodes       rL   sanity_checkCPPCompiler.sanity_checkY   s    D&&x>QSWXXrN   c                *   > [         TU ]  U5      S/-   $ )Nz-fpermissive)superget_compiler_check_args)rV   mode	__class__s     rL   r}   #CPPCompiler.get_compiler_check_args]   s     w.t47GGGrN   
extra_argsdependenciesc          	        > [         T
U ]  XX4UUS9u  pxU(       a  SU4$ Uc  / nU SU SU S3n	U R                  XUUS9$ )Nr   Tz
        #include <z>
        using z&;
        int main(void) { return 0; })r|   has_header_symbolcompiles)rV   hnamesymbolprefixenvr   r   foundcachedtr   s             rL   r   CPPCompiler.has_header_symbolc   s    
 1%=G?K 2 M <J ' h '* }}Q
*6  8 	8rN   c                L   UR                  S5      (       d   eSnU R                  X!/[        R                  S9 nUR                  S:X  a%  [
        R                  " SU S3S5         S S S 5        g[
        R                  " SU S3S	5         S S S 5        g
! , (       d  f       g = f)N-std=zint i = static_cast<int>(0);)r   r~   r   zCompiler accepts :YESTNOF)
startswithcompiler   COMPILE
returncoder   debug)rV   cpp_std_valueCPP_TESTps       rL   _test_cpp_std_argCPPCompiler._test_cpp_std_argw   s    ''0000 2\\(EUE]E]\^bc||q 

.}oQ?G _^
 

.}oQ?F _^^s   -B0B
B#c                    SSSSSSSSS	S
SSS.nU R                   [        / SQ5      ;   d   eX;  a  SU-   $ XU   4 H"  nSU-   nU R                  U5      (       d  M   Us  $    [        SU 35      e)Nr/   zgnu++0xr1   zgnu++1yr2   zgnu++1zr6   gnu++2azc++2bzgnu++2bzc++2czgnu++2c)r3   gnu++11r4   gnu++14r5   gnu++17r7   gnu++20r8   zgnu++23r9   zgnu++26)clanglccgcc
emscriptenarmltdclang
intel-llvmr   z#C++ Compiler does not support -std=)id	frozensetr   r   )rV   cpp_stdCPP_FALLBACKSir   s        rL   _find_best_cpp_stdCPPCompiler._find_best_cpp_std   s           
  ww)$fgggg'W$$12A#aKM%%m44$$ 3
 B7)LMMrN   c                   > [         TU ]  5       nU R                  S5      nUR                  U[        R
                  " S[        5      05        U$ )NstdrZ   )r|   get_optionsform_compileropt_keyupdater   UserStdOptionALL_STDSrV   optskeyr   s      rL   r   CPPCompiler.get_options   sJ    w"$''.&&uh7
 	 rN   rh   )rW   strreturnr   NNra   T.List[str]rb   r   rc   r   rd   r,   r\   boolre   'MachineInfo'r]   T.Optional['DynamicLinker']r^   T.Optional[str])r   r   r   r   )rv   r   rw   'Environment'r   Noner~   r   r   r   )r   r   r   r   r   r   r   r   r   zGT.Union[None, T.List[str], T.Callable[[CompileCheckMode], T.List[str]]]r    T.Optional[T.List['Dependency']]r   T.Tuple[bool, bool])r   r   r   r   )r   r   r   r   r   'MutableKeyedOptionDictType')__name__
__module____qualname____firstlineno__rX   languager_   classmethodrj   rn   rr   ry   r}   r   r   	functools	lru_cacher   r   __static_attributes____classcell__r   s   @rL   rP   rP   <   s    I H 8<15%$%4%  /%  YH quKO8,8&m8 )I8 Uh8 8($ "N "NH rN   rP   c                  V    \ rS rSrSrSS jr\R                  " S5      SS j5       rSr	g)	_StdCPPLibMixin   z*Detect whether to use libc++ or libstdc++.c                    U R                  SSU5      S   (       a  SOSnU R                  USSU5      S   nU(       a  SnU$ SnU$ )Nrc    r   ciso646_LIBCPP_VERSIONzc++stdc++)
has_headerr   )rV   r   header	is_libcxxlibs        rL   language_stdlib_provider(_StdCPPLibMixin.language_stdlib_provider   sQ    "ooiSA!D)**63Db#NqQ	 e
 '/
rN   Nc                   U R                  US5       Vs/ s H  nSU 3PM
     nnUR                  U R                     nUc   S5       eU R                  U5      nU R	                  XQ/ 5      b	  USU 3/-   $ [        S5      es  snf )zDetect the C++ stdlib and default search dirs

As an optimization, this method will cache the value, to avoid building the same values over and over

:param env: An Environment object
:raises MesonException: If a stdlib cannot be determined
	librariesz-Lfor mypyz-lzNCould not detect either libc++ or libstdc++ as your C++ stdlib implementation.)get_compiler_dirsmachinesrd   r   find_libraryr   )rV   r   dsearch_dirsmachiner   s         rL   language_stdlib_only_link_flags/_StdCPPLibMixin.language_stdlib_only_link_flags   s     *.)?)?[)QR)QAA3x)QR,,t//0".J."++C0Sr*6Bse*-- mnn Ss   Brh   )r   r*   r   r   )r   r*   r   r   )
r   r   r   r   __doc__r   r   r   r   r   rh   rN   rL   r   r      s+    4 o orN   r   c                     ^  \ rS rSr   S       SS jjrSU 4S jjrSSS jjrSSS jjrSSS jjrSS jr	SS jr
SU 4S	 jjrS
rU =r$ )ClangCPPCompiler   c
                    [         R                  XX#XEXgU	S9	  [        R                  " X5        SS/n
/ U
U
S/-   U
SS/-   S/S.U l        g Nr]   r^   -Wall-Winvalid-pch-Wextra
-Wpedanticz-Weverything0123
everything)rP   r_   r   	warn_argsrV   ra   rb   rc   rd   r\   re   r]   definesr^   default_warn_argss              rL   r_   ClangCPPCompiler.__init__   sh    
 	T7[!| 	 	Mt-$o6!00I;>0I|3LL)7(8	:rN   c                z  > [         TU ]  5       nU R                  S5      n[        R                  " U R                  U5      SS/ SQS9X'   U R                  S5      n[        R                  " U R                  U5      SS5      X'   U R                  S	5      n[        R                  " U R                  U5      S
S5      X'   U R                  R                  5       (       d  U R                  R                  5       (       a>  U R                  S5      n[        R                  " U R                  U5      S[        5      X'   U$ )NrJ   C++ exception handling type.defaultrB   r	  arE   scchoicesrttiEnable RTTITdebugstlSTL debug modeFwinlibs&Standard Win libraries to link against)r|   r   r   r   UserComboOptionmake_option_nameUserBooleanOptionre   
is_windows	is_cygwinUserStringArrayOptionr
   r   s      rL   r   ClangCPPCompiler.get_options   s   w"$''-++!!#&*7	9	 ''/--!!#&	
 ''
3--!!#&	
 99!!TYY%8%8%:%:++I6C55%%c*8DI rN   c                   / nU R                  SX!U5      nU R                  SX!U5      nU R                  SX!U5      n[        U[        5      (       d   e[        U[        5      (       d   e[        U[        5      (       d   e[	        Xt5        U(       a=  UR                  S5        [        U R                  S5      (       a  UR                  S5        U(       d  UR                  S5        U$ )Nr  r  rJ   -D_GLIBCXX_DEBUG=1>=18z5-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_DEBUG	-fno-rtti)get_compileropt_value
isinstancer   r   rM   rH   r   rc   rV   targetr   
subprojectrK   r  r  rJ   s           rL   get_option_compile_args(ClangCPPCompiler.get_option_compile_args  s    ))&#zJ--j#zR''c:F$%%%%"c""""(D))))B%KK,-
 t||V44STKK$rN   c                    / nU R                  SX!U5      n[        U[        5      (       d   eUS:w  a   UR                  U R	                  U5      5        U$ Nr   rB   r   r!  r   rH   r   rV   r#  r   r$  rK   r   s         rL   get_option_std_args$ClangCPPCompiler.get_option_std_args'  Q    ((ZH#s####&=KK//45rN   c                $   U R                   R                  5       (       d  U R                   R                  5       (       aQ  U R                  SX!U5      n[	        U[
        5      (       d   eUS S  nU H  n[	        U[        5      (       a  M   e   U$ / $ Nr  re   r  r  r   r!  listr   rV   r#  r   r$  retvallibsls          rL   get_option_link_args%ClangCPPCompiler.get_option_link_args/  s~    99!!TYY%8%8%:%://	3
SFfd++++!9D!!S)))) K	rN   c                .    [        U R                  S5      $ )Nr  r   rc   rm   s    rL   &is_libcpp_enable_assertions_deprecated7ClangCPPCompiler.is_libcpp_enable_assertions_deprecated:  s    t||V44rN   c                   U(       a  S/$ S H#  nU R                   R                  U5      c  M!  / s  $    U R                  U5      S:X  a  S/$ U R                  5       (       a  S/$ [	        U R
                  S5      (       a  S/$ / $ )N-DNDEBUG_GLIBCXX_ASSERTIONS_LIBCPP_HARDENING_MODE_LIBCPP_ENABLE_ASSERTIONSr   -D_GLIBCXX_ASSERTIONS=14-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_FAST>=15-D_LIBCPP_ENABLE_ASSERTIONS=1)r  rT   r   r:  r   rc   rV   disabler   macros       rL   get_assert_args ClangCPPCompiler.get_assert_args=  s    < dE||&2	 d ((-9-..::<<NOO v66788	rN   c                h   > [         TU ]  X5      n[        U R                  S5      (       a  S/U-   $ U$ )Nz>=11z-fpch-instantiate-templates)r|   get_pch_use_argsr   rc   )rV   pch_dirr   rK   r   s       rL   rL  !ClangCPPCompiler.get_pch_use_argsP  s6    w'84<<0012T99rN   r  NNNra   r   rb   r   rc   r   rd   r,   r\   r   re   r   r]   r   r  zT.Optional[T.Dict[str, str]]r^   r   r   Nr#  z'BuildTarget'r   r   r$  r   r   r   r#  r-   r   r*   r$  r   r   r   r   r   rG  r   r   r   r   r   rM  r   r   r   r   r   )r   r   r   r   r_   r   r%  r+  r6  r:  rI  rL  r   r   r   s   @rL   r   r      s_     8<9=15	:$:4: 7:  /	:<6	5& rN   r   c                      \ rS rSrSrSrg)ArmLtdClangCPPCompileriW  r   rh   Nr   r   r   r   r   r   rh   rN   rL   rY  rY  W  s    	BrN   rY  c                      \ rS rSrSS jrSrg)AppleClangCPPCompileri\  c                .    [        U R                  S5      $ )Nz>=16r9  rm   s    rL   r:  <AppleClangCPPCompiler.is_libcpp_enable_assertions_deprecated]  s     t||V44rN   rh   NrU  )r   r   r   r   r:  r   rh   rN   rL   r\  r\  \  s    5rN   r\  c                  P    \ rS rSrSrSrSr   S	       S
S jjrSSS jjrSr	g)EmscriptenCPPCompilerif  r   z>=2.0.10z>=3.1.39Nc
                    U(       d  [        S5      e[        US5      (       d  [        S5      e[        R                  XX#XEXgXS9
  g )Nz;Emscripten compiler can only be used for cross compilation.z	>=1.39.19z$Meson requires Emscripten >= 1.39.19)r]   r  r^   )r   r   r   r_   
rV   ra   rb   rc   rd   r\   re   r]   r  r^   s
             rL   r_   EmscriptenCPPCompiler.__init__s  sL    
  !^__w44 !GHH!!$+"&*1 	" 	NrN   c                    / nU R                  SX!U5      n[        U[        5      (       d   eUS:w  a   UR                  U R	                  U5      5        U$ r(  r)  r*  s         rL   r+  )EmscriptenCPPCompiler.get_option_std_args  r-  rN   rh   rP  rQ  rR  rT  )
r   r   r   r   r   _CPP23_VERSION_CPP26_VERSIONr_   r+  r   rh   rN   rL   r`  r`  f  sV    	B  NN 8<9=15	N$N4N 7N  /	N rN   r`  c                  h   ^  \ rS rSrSr  S     S	S jjrS
U 4S jjrSSS jjrSSS jjrSr	U =r
$ )ArmclangCPPCompileri  z
Keil armclang
c	                    [         R                  XX#XEXgUS9	  [        R                  " U 5        SS/n	/ U	U	S/-   U	SS/-   S/S.U l        g r   )rP   r_   r   r  
rV   ra   rb   rc   rd   r\   re   r]   r^   r  s
             rL   r_   ArmclangCPPCompiler.__init__  sh     	T7[!| 	 	M!!$'$o6!00I;>0I|3LL)7(8	:rN   c                4  > [         TU ]  5       nU R                  S5      n[        R                  " U R                  U5      SS/ SQS9X'   U R                  S5      nX   n[        U[        R                  5      (       d   S5       eUR                  / SQS	S
9  U$ )NrJ   r  r	  r
  r  r   r   )r.   r0   r3   r4   r5   Tr:   )	r|   r   r   r   r  r  r!  r   set_versionsrV   r   r   std_optr   s       rL   r   ArmclangCPPCompiler.get_options  s    w"$''-++!!#&*7	9	 ''.)'7#8#899E:E9JPTUrN   c                    / nU R                  SX!U5      n[        U[        5      (       d   eUS:w  a  UR                  SU-   5        U R                  SX!U5      n[        U[        5      (       d   e[	        Xd5        U$ )Nr   rB   r   rJ   )r   r!  r   rH   rM   )rV   r#  r   r$  rK   r   rJ   s          rL   r+  'ArmclangCPPCompiler.get_option_std_args  sy    ((ZH#s####&=KK#&''c:F"c""""B%rN   c                    / $ rR  rh   rV   r#  r   r$  s       rL   r6  (ArmclangCPPCompiler.get_option_link_args      	rN   rO  r   r   r   rR  rT  rS  )r   r   r   r   r   r_   r   r+  r6  r   r   r   s   @rL   ri  ri    sC     8<15:$:4:  /:  rN   ri  c                     ^  \ rS rSr   S
       SS jjrSU 4S jjrSSS jjrSSS jjrSSS jjrSS jr	SS jr
S	rU =r$ )GnuCPPCompileri  c
                    [         R                  XX#XEXgU	S9	  [        R                  " X5        SS/n
/ U
U
S/-   U
SS/-   U
SS/-   U R                  [        5      -   U R                  [
        5      -   S.U l        g )Nr   r   r   r   r   r   )rP   r_   r   supported_warn_argsr   r   r  r  s              rL   r_   GnuCPPCompiler.__init__  s    
 	T7[!| 	 	MT+$o6!00I;>0I|3LL):i=V)V)-)A)ABY)Z*[)-)A)ABV)W*X	ZrN   c                v  > [         TU ]  5       nU R                  S5      n[        R                  " U R                  U5      SS/ SQS9X'   U R                  S5      n[        R                  " U R                  U5      SS5      X'   U R                  S	5      n[        R                  " U R                  U5      S
S5      X'   U R                  R                  5       (       d  U R                  R                  5       (       a<  UR                  SS9n[        R                  " U R                  U5      S[        5      X'   U$ )NrJ   r  r	  r
  r  r  r  Tr  r  Fcpp_winlibs)rW   r  )r|   r   r   r   r  r  r  re   r  r  evolver  r
   r   s      rL   r   GnuCPPCompiler.get_options  s   w"$''-++!!#&*7	9	 ''/--!!#&	
 ''
3--!!#&	
 99!!TYY%8%8%:%:**-*0C55%%c*8DI
 rN   c                |   / nU R                  SX!U5      nU R                  SX!U5      nU R                  SX!U5      n[        U[        5      (       d   e[        U[        5      (       d   e[        U[        5      (       d   e[	        Xt5        U(       d  UR                  S5        U(       a  UR                  S5        U$ )Nr  r  rJ   r  r  )r   r!  r   r   rM   rH   r"  s           rL   r%  &GnuCPPCompiler.get_option_compile_args  s    ))&#zJ--j#zR''c:F$%%%%"c""""(D))))B%KK$KK,-rN   c                    / nU R                  SX!U5      n[        U[        5      (       d   eUS:w  a   UR                  U R	                  U5      5        U$ r(  r)  r*  s         rL   r+  "GnuCPPCompiler.get_option_std_args  r-  rN   c                $   U R                   R                  5       (       d  U R                   R                  5       (       aQ  U R                  SX!U5      n[	        U[
        5      (       d   eUS S  nU H  n[	        U[        5      (       a  M   e   U$ / $ r/  r0  r2  s          rL   r6  #GnuCPPCompiler.get_option_link_args
  s~    99!!TYY%8%8%:%://	3
SFfd++++ &q	D!!S)))) K	rN   c                   U(       a  S/$ S H#  nU R                   R                  U5      c  M!  / s  $    U R                  U5      S:X  a  S/$ [        U R                  S5      (       a  S/$ [        U R                  S5      (       a  S/$ / $ )	Nr=  r>  r   rB  r  rC  rD  rE  )r  rT   r   r   rc   rF  s       rL   rI  GnuCPPCompiler.get_assert_args  s    < dE||&2	 d ((-9-..t||V44NOO v66788	rN   c                F    SS[         R                  R                  U5      /$ )Nz-fpch-preprocessz-include)ospathbasename)rV   rM  r   s      rL   rL  GnuCPPCompiler.get_pch_use_args(  s    "J0@0@0HIIrN   rO  rP  rQ  r   rR  rS  rT  rV  rW  )r   r   r   r   r_   r   r%  r+  r6  rI  rL  r   r   r   s   @rL   rz  rz    sa     8<9=15	Z$Z4Z 7Z  /	Z">(	&J JrN   rz  c                  0    \ rS rSr  S     SS jjrSrg)PGICPPCompileri,  Nc	                ^    [         R                  XX#XEXgUS9	  [        R                  " U 5        g Nr   rP   r_   r"   r`   s	            rL   r_   PGICPPCompiler.__init__-  1     	T7[!| 	 	MT"rN   rh   r   r   )r   r   r   r   r_   r   rh   rN   rL   r  r  ,  s.     8<15#$#4#  /# #rN   r  c                  L   ^  \ rS rSrSr  S     SS jjrSU 4S jjrSrU =r$ )	NvidiaHPC_CPPCompileri6  
nvidia_hpcc	                ^    [         R                  XX#XEXgUS9	  [        R                  " U 5        g r  r  r`   s	            rL   r_   NvidiaHPC_CPPCompiler.__init__:  r  rN   c                   > [         TU ]  5       n/ SQnXR                  S5         n[        U[        R
                  5      (       d   S5       eUR                  U5        U$ )N)r.   r0   r3   r4   r5   r7   r8   gnu++98gnu++03r   r   r   r   r   r   r|   r   r   r!  r   r   ro  )rV   r   cppstd_choicesrq  r   s       rL   r   !NvidiaHPC_CPPCompiler.get_optionsB  s]    w"$
 0078'7#8#899E:E9^,rN   rh   r   r   r   	r   r   r   r   r   r_   r   r   r   r   s   @rL   r  r  6  s9    	B 8<15#$#4#  /#	 	rN   r  c                     ^  \ rS rSr   S
       SS jjrSU 4S jjrSSS.     SU 4S jjjrSSS jjrSSS jjrS	r	U =r
$ )ElbrusCPPCompileriN  Nc
                ^    [         R                  XX#XEXgU	S9	  [        R                  " U 5        g r  )rP   r_   r!   rb  s
             rL   r_   ElbrusCPPCompiler.__init__O  s1    
 	T7[!| 	 	M%rN   c                  > [         TU ]  5       nU R                  S5      n[        R                  " U R                  U5      SS/ SQS9X'   U R                  S5      n[        R                  " U R                  U5      SS5      X'   S	/n[        U R                  S
5      (       a  U/ SQ-  n[        U R                  S5      (       a"  [        U R                  S5      (       a  USS/-  n[        U R                  S5      (       a  US/-  n[        U R                  S5      (       a  US/-  n[        U R                  S5      (       a  USS/-  n[        U R                  S5      (       a  US/-  n[        U R                  S5      (       a  US/-  nU R                  S5      nX   n[        U[        R                  5      (       d   S5       eUR                  USS9  U$ )NrJ   r  r	  r
  r  r  r  Fr.   z	>=1.20.00)r0   r/   r3   z	>=1.21.00z<1.22.00r4   r1   z	>=1.22.00z	>=1.23.00z	>=1.24.00r2   r5   z	>=1.25.00r6   z	>=1.26.00r7   r   r   Trn  )r|   r   r   r   r  r  r  r   rc   r!  r   ro  )rV   r   r   cpp_stdsrq  r   s        rL   r   ElbrusCPPCompiler.get_optionsX  s   w"$''-++!!#&*7	9	 ''
3--!!#&	
 94<<5533H4<<55/$,,Xb:c:c'**H4<<55	!H4<<55	!H4<<55'**H4<<55	!H4<<55	!H''.)'7#8#899E:E9X40rN   r   c               2   > US:X  a  g[         TU ]  XUUUS9$ )Nlchmod)FFr   )r|   has_function)rV   funcnamer   r   r   r   r   s         rL   r  ElbrusCPPCompiler.has_function  s3     x7'#3=5A ( C CrN   c                    / nU R                  SX!U5      n[        U[        5      (       d   e[        XT5        U R                  SX!U5      n[        U[        5      (       d   eU(       a  UR	                  S5        U$ )NrJ   r  r  )r   r!  r   rM   rH   )rV   r#  r   r$  rK   rJ   r  s          rL   r%  )ElbrusCPPCompiler.get_option_compile_args  sr    ''c:F"c""""B%--j#zR(C((((KK,-rN   c                    / nU R                  SX!U5      n[        U[        5      (       d   eUS:w  a   UR                  U R	                  U5      5        U$ r(  r)  r*  s         rL   r+  %ElbrusCPPCompiler.get_option_std_args  r-  rN   rh   rP  rQ  r   )r  r   r   r   r   r   r   T.Optional[T.List[str]]r   r   r   r   rR  rS  rT  )r   r   r   r   r_   r   r  r%  r+  r   r   r   s   @rL   r  r  N  s|     8<9=15	&$&4& 7&  /	&$R <@FJC!8C#CCObC C rN   r  c                  r   ^  \ rS rSr  S     S	S jjrS
U 4S jjrSSS jjrSSS jjrSSS jjrSr	U =r
$ )IntelCPPCompileri  c	                    [         R                  XX#XEXgUS9	  [        R                  " U 5        SU l        / SQn	/ U	S/-   U	SS/-   U	SS/-   U	S/-   S.U l        g )Nr   z
c++-header)r   z-w3z-Wpch-messagesz-diag-disable:remarkr   r   )rP   r_   r   lang_headerr  rk  s
             rL   r_   IntelCPPCompiler.__init__  s~     	T7[!| 	 	M%%d+'>!04J3KK0I?U3VV0I?U3VV(9YK(G	IrN   c                  > [         TU ]  5       nU R                  S5      n[        R                  " U R                  U5      SS/ SQS9X'   U R                  S5      n[        R                  " U R                  U5      SS5      X'   U R                  S	5      n[        R                  " U R                  U5      S
S5      X'   SS/nSS/n[        U R                  S5      (       a  USS/-  nUS/-  n[        U R                  S5      (       a  US/-  n[        U R                  S5      (       a  US/-  n[        U R                  S5      (       a  US/-  nUS/-  nU R                  XU-   5        U$ )NrJ   r  r	  r
  r  r  r  Tr  r  Fr.   r0   r  r  z>=15.0.0r3   r4   r   z>=16.0.0r5   z>=17.0.0r   z>=19.1.0r6   r   )
r|   r   r   r   r  r  r  r   rc   _update_language_stds)rV   r   r   c_stdsg_stdsr   s        rL   r   IntelCPPCompiler.get_options  su   w"$''-++!!#&*7	9	 ''/--!!#&	
 ''
3--!!#&	 7#Y'4<<44w((Fyk!F4<<44wiF4<<44yk!F4<<44wiFyk!F""4&9rN   c                   / nU R                  SX!U5      nU R                  SX!U5      nU R                  SX!U5      n[        U[        5      (       d   e[        U[        5      (       d   e[        U[        5      (       d   eUS:X  a  UR	                  S5        U(       a  UR	                  S5        U(       a  UR	                  S5        U$ )Nr  r  rJ   rB   rC   r  r  r   r!  r   r   rH   r"  s           rL   r%  (IntelCPPCompiler.get_option_compile_args  s    ))&#zJ--j#zR''c:F$%%%%"c""""(D))))<KK)*KK$KK,-rN   c                    / nU R                  SX!U5      n[        U[        5      (       d   eUS:w  a(  SSS.nUR                  SUR	                  XU5      -   5        U$ )Nr   rB   r.   r  )r0   r  r   )r   r!  r   rH   rT   )rV   r#  r   r$  rK   r   remap_cpp03s          rL   r+  $IntelCPPCompiler.get_option_std_args  sc    ((ZH#s####&= $K KK+//#";;<rN   c                    / $ rR  rh   rv  s       rL   r6  %IntelCPPCompiler.get_option_link_args  rx  rN   )r  r  r   r   r   rR  rS  rT  )r   r   r   r   r_   r   r%  r+  r6  r   r   r   s   @rL   r  r    sH     8<15I$I4I  /I'R& rN   r  c                      \ rS rSrSrSrg)IntelLLVMCPPCompileri  r   rh   NrZ  rh   rN   rL   r  r    s    	BrN   r  c                     ^  \ rS rSrSrSSSSSSS	S
SSSS.rSSS jjrSU 4S jjrSSS jjrSSS jjr	SS jr
SrU =r$ ) VisualStudioLikeCPPCompilerMixini  z?Mixin for C++ specific method overrides in MSVC-like compilers.)TN)T   )T   )T   )T   )Tlatest)Fr  )Fr  )Fr  )Fr  )Fr  )rB   r;   r<   r=   r>   r?   r3   r4   r5   r7   r@   c                   U R                  S5      R                  US9nU(       a  UR                  R                  X5      nO%UR                  R                  R                  U5      n[        R                  " SU5      S S  $ )Nr  r$  r   )r   r  coredataget_option_for_targetoptstoreget_value_forTcast)rV   r#  r   r$  r   values         rL   r6  5VisualStudioLikeCPPCompilerMixin.get_option_link_args  sg    ''	299Z9PLL66vCELL))77<EvvmU+A..rN   c                  > [         TU ]  5       nU R                  S5      n[        R                  " U R                  U5      SS/ SQS9X'   U R                  S5      n[        R                  " U R                  U5      SS5      X'   U R                  S	5      n[        R                  " U R                  U5      S
[        5      X'   XR                  S5         n[        U[        R                  5      (       d   S5       eUR                  U5        U$ )NrJ   r  r	  r
  r  r  r  Tr  r  r   r   )r|   r   r   r   r  r  r  r  r   r!  r   ro  )rV   r   r  r   rq  r   s        rL   _get_options_impl2VisualStudioLikeCPPCompilerMixin._get_options_impl  s    w"$''-++!!#&*7	9	 ''/--!!#&	
 ''	211!!#&4	
 0078'7#8#899E:E9X&rN   c                j   / nU R                  SX!U5      nU R                  SX!U5      n[        U[        5      (       d   e[        U[        5      (       d   eUS:X  a  UR	                  S5        O,US:X  a  UR	                  S5        OUR	                  SU-   5        U(       d  UR	                  S5        U$ )	NrJ   r  r	  z/EHscrB   z/EHs-c-z/EHz/GR-r  )rV   r#  r   r$  rK   rJ   r  s          rL   r%  8VisualStudioLikeCPPCompilerMixin.get_option_compile_args9  s    ''c:F))&#zJ$%%%%"c""""?KK 6\KK	"KK
#KKrN   c                    / nU R                  SX!U5      n[        U[        5      (       d   eU R                  U   u  pgUb  UR	                  SU 35        U(       d  UR	                  S5        U$ )Nr   z/std:c++/permissive-)r   r!  r   VC_VERSION_MAPrH   )rV   r#  r   r$  rK   r   
permissivevers           rL   r+  4VisualStudioLikeCPPCompilerMixin.get_option_std_argsN  sl    ((ZH#s####--c2
?KK(3%()KK'rN   c                .    [         R                  " X5      $ rR  )r   r}   rV   r~   s     rL   r}   8VisualStudioLikeCPPCompilerMixin.get_compiler_check_argsZ  s    //;;rN   rh   rR  rS  )r   r   r  r   r   r   rT  r   )r   r   r   r   r   r  r6  r  r%  r+  r}   r   r   r   s   @rL   r  r    sN    I &&N/6*
< <rN   r  c                  4   ^  \ rS rSrSrSSU 4S jjjrSrU =r$ )CPP11AsCPP14Mixini^  zMixin class for VisualStudio and ClangCl to replace C++11 std with C++14.

This is a limitation of Clang and MSVC that ICL doesn't share.
c                  > U R                  S5      R                  US9nUb  UR                  R                  X5      nO%UR                  R                  R                  U5      nUS;   a"  [        R                  " U R                  SSSSS9  [        T
U ])  XU5      nS	S
0nU Vs/ s H  oR                  X5      PM     n	nU	$ s  snf )Nr   r  >   r3   r;   zdoes not support C++11;z5attempting best effort; setting the standard to C++14TF)oncerG   z
/std:c++11z
/std:c++14)r   r  r  r  r  r  r   rI   r   r|   r+  rT   )rV   r#  r   r$  stdkeyr   original_argsstd_mappingxprocessed_argsr   s             rL   r+  %CPP11AsCPP14Mixin.get_option_std_argse  s    
 **5188J8O,,44VDC,,''55f=C%%LL";P"%1 3FL#\29FGA//!/G Hs   $Crh   rR  rT  )r   r   r   r   r   r+  r   r   r   s   @rL   r  r  ^  s    
 rN   r  c                  h   ^  \ rS rSrSr  S         SS jjrS	U 4S jjrS
SU 4S jjjrSrU =r	$ )VisualStudioCPPCompileriy  msvcc
                    [         R                  XX#XEXhU	S9	  [        R                  " X5        [        U R                  S5      (       a  U R
                  S/-   U l        g g )Nr   z>= 19.14.26428z/Zc:__cplusplus)rP   r_   r   r   rc   always_args)
rV   ra   rb   rc   rd   r\   re   r#  r]   r^   s
             rL   r_    VisualStudioCPPCompiler.__init__}  sa     	T7[!| 	 	Md+
 4<<)9::#//3D2EED ;rN   c                \  > / SQn[        U R                  S5      (       a  UR                  / SQ5        [        U R                  S5      (       a  UR                  / SQ5        [        U R                  S5      (       a  UR                  SS/5        U R                  [        TU ]  5       U5      $ )	N)rB   r3   r;   z>=19)r4   r@   r?   z>=19.11)r<   r5   r=   z>=19.29r7   r>   )r   rc   extendr  r|   r   rV   r  r   s     rL   r   #VisualStudioCPPCompiler.get_options  s    .4<<00OO@A4<<33OO9:4<<33OOWh/0%%eg&9&;XFFrN   c                <  > U R                  SX!U5      nUS:w  a0  [        U R                  S5      (       a  [        R                  " SSS9  [
        TU ]  XU5      n[        U R                  S5      (       a   UR                  S5      nXV	 U$ ! [         a    Us $ f = f)	Nr   rB   z<19.00.24210z7This version of MSVC does not support cpp_std argumentsFrF   z<19.11r  )	r   r   rc   r   rI   r|   r+  index
ValueError)rV   r#  r   r$  r   rK   r   r   s          rL   r+  +VisualStudioCPPCompiler.get_option_std_args  s    ((ZH&=_T\\>JJLLRZ_`w*6
C4<<22JJ~.   s   7B BB)r  r   )ra   r   rb   r   rc   r   rd   r,   r\   r   re   r   r#  r   r]   r   r^   r   r   rR  rT  )
r   r   r   r   r   r_   r   r+  r   r   r   s   @rL   r  r  y  sU    	B 8<15FF'4F>AF4F  /F
G rN   r  c                  T   ^  \ rS rSrSr  S         SS jjrSU 4S jjrSrU =r$ )	ClangClCPPCompileri  zclang-clc	                `    [         R                  U / XX4XWUS9	  [        R                  " X5        g r  )rP   r_   r   	rV   rb   rc   rd   r\   re   r#  r]   r^   s	            rL   r_   ClangClCPPCompiler.__init__  s3     	T2w!| 	 	M  .rN   c                H   > / SQnU R                  [        TU ]	  5       U5      $ )N)
rB   r3   r;   r4   r<   r5   r=   r7   r>   r@   )r  r|   r   r  s     rL   r   ClangClCPPCompiler.get_options  s#    t%%eg&9&;XFFrN   rh   r   rb   r   rc   r   rd   r,   r\   r   re   r   r#  r   r]   r   r^   r   r   r  r   s   @rL   r  r    sK    	B 8<15//'4/>A/4/  //G GrN   r  c                  Z   ^  \ rS rSr  S         SS jjrSU 4S jjrS	S jrSrU =r$ )
IntelClCPPCompileri  c	                `    [         R                  U / XX4XWUS9	  [        R                  " X5        g r  )rP   r_   r   r  s	            rL   r_   IntelClCPPCompiler.__init__  s3     	T2w!| 	 	M%..t<rN   c                   > [        U R                  S5      (       a  / SQnO/ SQn[        U R                  S5      (       a  US/-  nU R                  [        TU ]  5       U5      $ )Nz	<2021.1.0)rB   r3   r;   r4   r<   r5   r=   r@   )rB   r4   r5   r@   z
>=2024.1.0r7   )r   rc   r  r|   r   r  s     rL   r   IntelClCPPCompiler.get_options  sV    4<<55eH>H4<<66	!H%%eg&9&;XFFrN   c                .    [         R                  " X5      $ rR  )r   r}   r  s     rL   r}   *IntelClCPPCompiler.get_compiler_check_args  s    ,DDTPPrN   rh   r   r  r   r   )	r   r   r   r   r_   r   r}   r   r   r   s   @rL   r  r    sL     8<15=='4=>A=4=  /=GQ QrN   r  c                      \ rS rSrSrSrg)IntelLLVMClCPPCompileri  zintel-llvm-clrh   NrZ  rh   rN   rL   r  r    s    	BrN   r  c                  n   ^  \ rS rSr  S     S	S jjrS
U 4S jjrSSS jjrSSS jjrSS jrSr	U =r
$ )ArmCPPCompileri  c	                ^    [         R                  XX#XEXgUS9	  [        R                  " U 5        g r  )rP   r_   r   r`   s	            rL   r_   ArmCPPCompiler.__init__  r  rN   c                   > [         TU ]  5       nU R                  S5      n[        U[        R
                  5      (       d   S5       eUR                  SS/5        U$ )Nr   r   r0   r3   r  )rV   r   rq  r   s      rL   r   ArmCPPCompiler.get_options  sV    w"$++E2'7#8#899E:E9gw/0rN   c                    / nU R                  SX!U5      n[        U[        5      (       d   eUS:X  a  UR                  S5        U$ US:X  a  UR                  S5        U$ )Nr   r3   z--cpp11r0   z--cppr   r!  r   rH   r*  s         rL   r+  "ArmCPPCompiler.get_option_std_args  sb    ((ZH#s####'>KK	"  G^KK rN   c                    / $ rR  rh   rv  s       rL   r6  #ArmCPPCompiler.get_option_link_args  rx  rN   c                    / $ rR  rh   r  s     rL   r}   &ArmCPPCompiler.get_compiler_check_args  rx  rN   rh   r   r   r   rR  rT  rS  r   )r   r   r   r   r_   r   r+  r6  r}   r   r   r   s   @rL   r  r    sC     8<15#$#4#  /# rN   r  c                  f    \ rS rSr  S
     SS jjrSS jrSS jrSS jrSSS jjrSS jr	S	r
g)CcrxCPPCompileri  Nc	                ^    [         R                  XX#XEXgUS9	  [        R                  " U 5        g r  )rP   r_   r   r`   s	            rL   r_   CcrxCPPCompiler.__init__  s1     	T7[!| 	 	Md#rN   c                
    SS/$ )Nz-nologoz	-lang=cpprh   rm   s    rL   get_always_argsCcrxCPPCompiler.get_always_args   s    ;''rN   c                    / $ rR  rh   rm   s    rL   get_compile_only_args%CcrxCPPCompiler.get_compile_only_args  rx  rN   c                    SU 3/$ )Nz-output=obj=rh   )rV   
outputnames     rL   get_output_argsCcrxCPPCompiler.get_output_args  s    zl+,,rN   c                    / $ rR  rh   rv  s       rL   r6  $CcrxCPPCompiler.get_option_link_args	  rx  rN   c                    / $ rR  rh   r  s     rL   r}   'CcrxCPPCompiler.get_compiler_check_args  rx  rN   rh   r   r   r   )r(  r   r   r   rR  rS  r   )r   r   r   r   r_   r"  r%  r)  r6  r}   r   rh   rN   rL   r  r    sB     8<15$$$4$  /$(-rN   r  c                  n   ^  \ rS rSr  S     S	S jjrS
U 4S jjrSSS jjrSS jrSSS jjrSr	U =r
$ )TICPPCompileri  c	                ^    [         R                  XX#XEXgUS9	  [        R                  " U 5        g r  )rP   r_   r   r`   s	            rL   r_   TICPPCompiler.__init__  s1     	T7[!| 	 	MD!rN   c                   > [         TU ]  5       nU R                  S5      nX   n[        U[        R
                  5      (       d   S5       eUR                  S/5        U$ )Nr   r   r0   r  rp  s       rL   r   TICPPCompiler.get_options  sZ    w"$''.)'7#8#899E:E9gY'rN   c                    / nU R                  SX!U5      n[        U[        5      (       d   eUS:w  a  UR                  SU-   5        U$ )Nr   rB   z--r  r*  s         rL   r+  !TICPPCompiler.get_option_std_args   sJ    ((ZH#s####&=KKs
#rN   c                    / $ rR  rh   rm   s    rL   r"  TICPPCompiler.get_always_args(  rx  rN   c                    / $ rR  rh   rv  s       rL   r6  "TICPPCompiler.get_option_link_args+  rx  rN   rh   r   r   r   rR  rT  r   rS  )r   r   r   r   r_   r   r+  r"  r6  r   r   r   s   @rL   r0  r0    sC     8<15"$"4"  /" rN   r0  c                      \ rS rSrSrSrg)C2000CPPCompileri.  c2000rh   NrZ  rh   rN   rL   r<  r<  .  s    	BrN   r<  c                      \ rS rSrSrSrg)C6000CPPCompileri2  c6000rh   NrZ  rh   rN   rL   r?  r?  2  s    	BrN   r?  c                  h   ^  \ rS rSrSr  S       S	S jjrS
S jrSU 4S jjrSSS jjrSr	U =r
$ )MetrowerksCPPCompilerARMi5  mwccarmc	                ^    [         R                  XX#XEXgUS9	  [        R                  " U 5        g r  rP   r_   r$   r`   s	            rL   r_   !MetrowerksCPPCompilerARM.__init__8  1     	T7[!| 	 	M##D)rN   c                0    [         R                  " US 5      $ rR  )r%   rT   rV   instruction_sets     rL   get_instruction_set_args1MetrowerksCPPCompilerARM.get_instruction_set_args@  s    +//FFrN   c                H   > [         TU ]  5       nU R                  U/ 5        U$ rR  r|   r   r  rV   r   r   s     rL   r   $MetrowerksCPPCompilerARM.get_optionsC  %    w"$""4,rN   c                    / nU R                  SX!U5      n[        U[        5      (       d   eUS:w  a"  UR                  S5        UR                  U5        U$ )Nr   rB   z-langr  r*  s         rL   r+  ,MetrowerksCPPCompilerARM.get_option_std_argsH  sR    ((ZH#s####&=KK KKrN   rh   r   r   rJ  r   r   r  r   rR  rT  r   r   r   r   r   r_   rK  r   r+  r   r   r   s   @rL   rB  rB  5  sL    	B 8<15**'4*4*  /*G
 rN   rB  c                  h   ^  \ rS rSrSr  S       S	S jjrS
S jrSU 4S jjrSSS jjrSr	U =r
$ )$MetrowerksCPPCompilerEmbeddedPowerPCiQ  mwcceppcc	                ^    [         R                  XX#XEXgUS9	  [        R                  " U 5        g r  rE  r`   s	            rL   r_   -MetrowerksCPPCompilerEmbeddedPowerPC.__init__T  rG  rN   c                0    [         R                  " US 5      $ rR  )r&   rT   rI  s     rL   rK  =MetrowerksCPPCompilerEmbeddedPowerPC.get_instruction_set_args\  s    ,00$GGrN   c                H   > [         TU ]  5       nU R                  U/ 5        U$ rR  rN  rO  s     rL   r   0MetrowerksCPPCompilerEmbeddedPowerPC.get_options_  rQ  rN   c                    / nU R                  SX!U5      n[        U[        5      (       d   eUS:w  a  UR                  SU-   5        U$ )Nr   rB   z-lang r  r*  s         rL   r+  8MetrowerksCPPCompilerEmbeddedPowerPC.get_option_std_argsd  sJ    ((ZH#s####&=KK3'rN   rh   r   r   rT  r   rR  rT  rU  r   s   @rL   rW  rW  Q  sL    	B 8<15**'4*4*  /*H
 rN   rW  )rJ   r   rK   r   r   r   )d
__future__r   r   os.pathr  typingr  r   r   r   mesonlibr   r   	compilersr
   r   r   r   c_function_attributesr   r   mixins.appler   r   mixins.cliker   mixins.ccrxr   	mixins.tir   
mixins.armr   r   mixins.visualstudior   r   
mixins.gnur   r   r   r   mixins.intelr   r   mixins.clangr   r    mixins.elbrusr!   
mixins.pgir"   mixins.emscriptenr#   mixins.metrowerksr$   r%   r&   TYPE_CHECKINGr'   r   r(   	envconfigr)   rw   r*   linkers.linkersr+   r,   buildr-   CompilerMixinBaseobjectr   rM   rP   r   r   rY  r\  r`  ri  rz  r  r  r  r  r  r  r  r  r  r  r  r  r  r0  r<  r?  rB  rW  )r   s   0rL   <module>rz     si   #      6  J ? ' % ! 5 > ^ ^ M 5 ) # . 1 Z??4)')/(#%w 1s3qr7)_1 1 O OLx- xv#o' #oLwm[ wt- 
5.0ACS 5 O-=  F1*K 1hlJ_j+{ lJ^#[+ #K 0P PfZ+[ Zz+ 
Y<'8 Y<v) 6+/1QS_al +ZG*,Lo_j G"Q9;XZe Q2/ 
[+ BlK 2J >} } 1; 8+={ A! 2s   *I