
    -Ph¼                       d dl m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mZ ddlmZmZmZmZ dd	lmZmZ dd
lmZmZ ddlmZ ddlmZ ddlmZ ddlmZm Z  ddl!m"Z"m#Z# ddl$m%Z%m&Z&m'Z'm(Z( ddl)m*Z*m+Z+ ddl,m-Z-m.Z. ddl/m0Z0 ddl1m2Z2 ddl3m4Z4 ddl5m6Z6 ddl5m7Z7m8Z8 ej9        r-ddlm:Z: ddl;m<Z< ddl=m>Z> ddl?m@Z@ ddlAmBZB ddl
mCZC ddlDmEZE eZFneGZFg dZHeHd  eHD             z  ZHeHg d!z  ZHd]d(ZI G d) d*ee          ZJ G d+ d,eF          ZK G d- d.eKe.e-eJ          ZL G d/ d0eL          ZM G d1 d2eeeL          ZN G d3 d4e4eL          ZO G d5 d6e eJ          ZP G d7 d8eKe&e%eJ          ZQ G d9 d:e2eJ          ZR G d; d<e2eJ          ZS G d= d>e0eJ          ZT G d? d@e*eJ          ZU G dA dBeL          ZV G dC dDeF          ZW G dE dFeF          ZX G dG dHeXeWe"eJ          ZY G dI dJeXeWe#eJ          ZZ G dK dLeWe+eJ          Z[ G dM dNe[          Z\ G dO dPeeJ          Z] G dQ dReeJ          Z^ G dS dTeeJ          Z_ G dU dVe_          Z` G dW dXe_          Za G dY dZe6eJ          Zb G d[ d\e6eJ          ZcdS )^    )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++26c                (    g | ]}d |dd          S )gnur	   N ).0stds     X/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mesonbuild/compilers/cpp.py
<listcomp>r@   1   s&    111_3qrr7__111    )vc++11vc++14vc++17vc++20
vc++latest	c++latestehstrargsT.List[str]returnNonec                    | dk    r|                     d           d S | dv rt          j        d|  dd           d S d S )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)rH   rJ   s     r?   non_msvc_eh_optionsrW   5   sy    	V||%&&&&&	z		 >" > > >EJ	L 	L 	L 	L 	L 	L 
	rA   c                       e Zd Zd2dZdZ	 	 d3d4dZed5d            Zd6dZd6dZ	d7dZ
d8 fd Zddd!d9 fd+Zd:d-Z ej                    d;d/            Zd< fd1Z xZS )=CPPCompilernamerI   rL   c                    	 t          j        |t          |                   S # t          $ r t	          d| d          w xY w)NzUnknown function attribute "")r   getr   KeyErrorr   )selfrZ   s     r?   attribute_check_funcz CPPCompiler.attribute_check_func=   sZ    	I&*41B41HIII 	I 	I 	I !G!G!G!GHHH	Is	   " A cppNccacherK   exelistversionfor_machiner,   is_crossboolinfo'MachineInfo'linkerT.Optional['DynamicLinker']full_versionT.Optional[str]c	                h    t          j        | ||||||||	  	         t          j        |            d S )N)rf   rj   rl   )r   __init__r   	r_   rb   rc   rd   re   rf   rh   rj   rl   s	            r?   ro   zCPPCompiler.__init__E   sK    
 	$+t#+F'3	5 	5 	5 	5 	t$$$$$rA   c                    dS )NzC++r<   )clss    r?   get_display_languagez CPPCompiler.get_display_languageO   s    urA   c                    dgS )Nz-nostdinc++r<   r_   s    r?   get_no_stdinc_argszCPPCompiler.get_no_stdinc_argsS   
    rA   c                    dgS )Nz-nostdlib++r<   ru   s    r?   get_no_stdlib_link_argsz#CPPCompiler.get_no_stdlib_link_argsV   rw   rA   work_direnvironment'Environment'rM   c                6    d}|                      ||d|          S )Nz2class breakCCompiler;int main(void) { return 0; }
zsanitycheckcpp.cc)_sanity_check_impl)r_   rz   r{   codes       r?   sanity_checkzCPPCompiler.sanity_checkY   s#    D&&x>QSWXXXrA   moder   c                N    t                                          |          dgz   S )Nz-fpermissive)superget_compiler_check_args)r_   r   	__class__s     r?   r   z#CPPCompiler.get_compiler_check_args]   s%     ww..t447GGGrA   
extra_argsdependencieshnamesymbolprefixenvr   GT.Union[None, T.List[str], T.Callable[[CompileCheckMode], T.List[str]]]r    T.Optional[T.List['Dependency']]T.Tuple[bool, bool]c                   t                                          ||||||          \  }}|rd|fS |g }| d| d| d}	|                     |	|||          S )Nr   Tz
        #include <z>
        using z&;
        int main(void) { return 0; })r   has_header_symbolcompiles)r_   r   r   r   r   r   r   foundcachedtr   s             r?   r   zCPPCompiler.has_header_symbolc   s    
 11%=G?K 2 M Mv  	 <J * ** ** * * }}Q
*6  8 8 	8rA   cpp_std_valuec                H   |                     d          sJ d}|                     ||gt          j                  5 }|j        dk    r't          j        d| dd           	 d d d            dS t          j        d| dd	           	 d d d            d
S # 1 swxY w Y   d S )N-std=zint i = static_cast<int>(0);)r   r   r   zCompiler accepts :YESTNOF)
startswithcompiler   COMPILE
returncoder   debug)r_   r   CPP_TESTps       r?   _test_cpp_std_argzCPPCompiler._test_cpp_std_argw   s   ''00000 2\\(EUE]\^^ 	bc|q  
?}???GGG	 	 	 	 	 	 	 	
 
?}???FFF	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   &B0BBBcpp_stdc                    ddddddddd	d
ddd}| j         t          g d          v sJ ||vrd|z   S |||         fD ] }d|z   }|                     |          r|c S !t          d|           )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   )r_   r   CPP_FALLBACKSir   s        r?   _find_best_cpp_stdzCPPCompiler._find_best_cpp_std   s           
 
  w)$f$f$fgggggg-''W$$=12 	% 	%A#aKM%%m44 %$$$$% L7LLMMMrA   'MutableKeyedOptionDictType'c                    t                                                      }|                     d          }|                    |t	          j        dt                    i           |S )Nr>   ra   )r   get_optionsform_compileropt_keyupdater   UserStdOptionALL_STDSr_   optskeyr   s      r?   r   zCPPCompiler.get_options   s_    ww""$$''..&uh77
 	 	 	 rA   )rZ   rI   rL   rI   NNrb   rK   rc   rK   rd   rI   re   r,   rf   rg   rh   ri   rj   rk   rl   rm   )rL   rI   rL   rK   )rz   rI   r{   r|   rL   rM   r   r   rL   rK   )r   rI   r   rI   r   rI   r   r|   r   r   r   r   rL   r   )r   rI   rL   rg   )r   rI   rL   rI   rL   r   )__name__
__module____qualname__r`   languagero   classmethodrs   rv   ry   r   r   r   r   	functools	lru_cacher   r   __classcell__r   s   @r?   rY   rY   <   sx       I I I I H 8<15% % % % %    [      Y Y Y YH H H H H H quKO8 8 8 8 8 8 8 8(   $ Y"N "N "N "NH         rA   rY   c                  N    e Zd ZdZd
dZ ej        d          dd	            ZdS )_StdCPPLibMixinz*Detect whether to use libc++ or libstdc++.r   r*   rL   rI   c                    |                      dd|          d         rdnd}|                     |dd|          d         }|rdnd}|S )Nrd    r   ciso646_LIBCPP_VERSIONzc++stdc++)
has_headerr   )r_   r   header	is_libcxxlibs        r?   language_stdlib_providerz(_StdCPPLibMixin.language_stdlib_provider   sW    "ooiSAA!DS)**63Db#NNqQ	 .eeh
rA   NrK   c                   d |                      |d          D             }|j        | j                 }|
J d            |                     |          }|                     ||g           	|d| gz   S t          d          )a  Detect 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
        c                    g | ]}d | S )z-Lr<   )r=   ds     r?   r@   zC_StdCPPLibMixin.language_stdlib_only_link_flags.<locals>.<listcomp>   s    RRRAxAxxRRRrA   	librariesNfor mypyz-lzNCould not detect either libc++ or libstdc++ as your C++ stdlib implementation.)get_compiler_dirsmachinesre   r   find_libraryr   )r_   r   search_dirsmachiner   s        r?   language_stdlib_only_link_flagsz/_StdCPPLibMixin.language_stdlib_only_link_flags   s     SR)?)?[)Q)QRRR,t/0""J"""++C00S#r**6*s**-- mnnnrA   )r   r*   rL   rI   )r   r*   rL   rK   )r   r   r   __doc__r   r   r   r   r<   rA   r?   r   r      sb        44    Yo o o o o orA   r   c                  b     e Zd Z	 	 	 d&d'dZd( fdZd)d*dZd)d+dZd)d*d Zd,d"Zd- fd%Z	 xZ
S ).ClangCPPCompilerNrb   rK   rc   rd   rI   re   r,   rf   rg   rh   ri   rj   rk   definesT.Optional[T.Dict[str, str]]rl   rm   c
                    t                               | ||||||||		  	         t          j        | |           ddg}
g |
|
dgz   |
ddgz   dgd| _        d S Nrj   rl   -Wall-Winvalid-pch-Wextra
-Wpedanticz-Weverything0123
everything)rY   ro   r   	warn_argsr_   rb   rc   rd   re   rf   rh   rj   r   rl   default_warn_argss              r?   ro   zClangCPPCompiler.__init__   s    
 	T67G[(!&| 	 	M 	M 	MtW---$o6!00I;>0I|3LL)7(8	: :rA   rL   r   c                   t                                                      }|                     d          }t          j        |                     |          ddg d          ||<   |                     d          }t          j        |                     |          dd          ||<   |                     d	          }t          j        |                     |          d
d          ||<   | j                                        s| j        	                                rF|                     d          }t          j
        |                     |          dt                    ||<   |S )NrH   C++ exception handling type.defaultrO   r   arR   scchoicesrttiEnable RTTITdebugstlSTL debug modeFwinlibs&Standard Win libraries to link against)r   r   r   r   UserComboOptionmake_option_nameUserBooleanOptionrh   
is_windows	is_cygwinUserStringArrayOptionr
   r   s      r?   r   zClangCPPCompiler.get_options   s^   ww""$$''--+!!#&&*777	9 9 9S	 ''//-!!#&& S	
 ''
33-!!#&& S	
 9!! 	TY%8%8%:%: 	++I66C5%%c**8 DI rA   target'BuildTarget'r   r|   
subprojectc                   g }|                      d|||          }|                      d|||          }|                      d|||          }t          |t                    sJ t          |t                    sJ t          |t                    sJ t	          ||           |r?|                    d           t          | j        d          r|                    d           |s|                    d           |S )Nr  r  rH   -D_GLIBCXX_DEBUG=1>=18z5-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_DEBUG	-fno-rtti)get_compileropt_value
isinstancerg   rI   rW   rU   r   rd   r_   r  r   r  rJ   r  r  rH   s           r?   get_option_compile_argsz(ClangCPPCompiler.get_option_compile_args  s	   ))&#vzJJ--j#vzRR''c6:FF$%%%%%"c"""""(D)))))B%%% 	UKK,---
 t|V44 USTTT 	%KK$$$rA   r-   r*   c                    g }|                      d|||          }t          |t                    sJ |dk    r(|                    |                     |                     |S Nr>   rO   r  r  rI   rU   r   r_   r  r   r  rJ   r>   s         r?   get_option_std_argsz$ClangCPPCompiler.get_option_std_args'  d    ((VZHH#s#####&==KK//44555rA   c                   | j                                         s| j                                         rW|                     d|||          }t	          |t
                    sJ |d d          }|D ]}t	          |t                    sJ |S g S Nr  rh   r  r  r  r  listrI   r_   r  r   r  retvallibsls          r?   get_option_link_argsz%ClangCPPCompiler.get_option_link_args/  s    9!! 	TY%8%8%:%: 	//	3
SSFfd+++++!!!9D * *!!S))))))K	rA   disablec                    |rdgS dD ] }| j                             |          g c S !|                     |          dk    rdgS t          | j        d          rdgS t          | j        d          rdgS g S 	Nz-DNDEBUG)_GLIBCXX_ASSERTIONS_LIBCPP_HARDENING_MODE_LIBCPP_ENABLE_ASSERTIONSr   z-D_GLIBCXX_ASSERTIONS=1r  z4-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_FASTz>=15z-D_LIBCPP_ENABLE_ASSERTIONS=1r   r]   r   r   rd   r_   r(  r   macros       r?   get_assert_argsz ClangCPPCompiler.get_assert_args:       	 < d 	 	E|&&2			 3 ((--99-..t|V44 9NOO v66 9788	rA   pch_dirr   c                    t                                          ||          }t          | j        d          rdg|z   S |S )Nz>=11z-fpch-instantiate-templates)r   get_pch_use_argsr   rd   )r_   r3  r   rJ   r   s       r?   r5  z!ClangCPPCompiler.get_pch_use_argsM  sC    ww''884<00 	:12T99rA   NNNrb   rK   rc   rK   rd   rI   re   r,   rf   rg   rh   ri   rj   rk   r   r   rl   rm   r   Nr  r  r   r|   r  rm   rL   rK   r  r-   r   r*   r  rm   rL   rK   r(  rg   r   r|   rL   rK   r3  rI   r   rI   rL   rK   r   r   r   ro   r   r  r  r'  r1  r5  r   r   s   @r?   r   r      s         8<9=15	: : : : :     <    6    	 	 	 	 	   &         rA   r   c                      e Zd ZdZdS )ArmLtdClangCPPCompilerr   Nr   r   r   r   r<   rA   r?   r?  r?  T  s        	BBBrA   r?  c                      e Zd ZdS )AppleClangCPPCompilerN)r   r   r   r<   rA   r?   rB  rB  Y  s        DrA   rB  c                  4    e Zd ZdZdZdZ	 	 	 dddZd d!dZdS )"EmscriptenCPPCompilerr   z>=2.0.10z>=3.1.39Nrb   rK   rc   rd   rI   re   r,   rf   rg   rh   ri   rj   rk   r   r   rl   rm   c
                    |st          d          t          |d          st          d          t                              | |||||||||	
  
         d S )Nz;Emscripten compiler can only be used for cross compilation.z	>=1.39.19z$Meson requires Emscripten >= 1.39.19)rj   r   rl   )r   r   r   ro   
r_   rb   rc   rd   re   rf   rh   rj   r   rl   s
             r?   ro   zEmscriptenCPPCompiler.__init__j  s    
  	` !^___w44 	I !GHHH!!$+x"&v*1 	" 	N 	N 	N 	N 	NrA   r  r-   r   r*   r  rL   c                    g }|                      d|||          }t          |t                    sJ |dk    r(|                    |                     |                     |S r  r  r  s         r?   r  z)EmscriptenCPPCompiler.get_option_std_argsw  r  rA   r6  r7  r8  r:  )r   r   r   r   _CPP23_VERSION_CPP26_VERSIONro   r  r<   rA   r?   rD  rD  ]  sg        	B  NN 8<9=15	N N N N N      rA   rD  c                  F     e Zd ZdZ	 	 dd dZd! fdZd"d#dZd"d$dZ xZS )%ArmclangCPPCompilerz
    Keil armclang
    Nrb   rK   rc   rd   rI   re   r,   rf   rg   rh   ri   rj   rk   rl   rm   c	                    t                               | ||||||||	  	         t          j        |            ddg}	g |	|	dgz   |	ddgz   dgd| _        d S r   )rY   ro   r   r   
r_   rb   rc   rd   re   rf   rh   rj   rl   r   s
             r?   ro   zArmclangCPPCompiler.__init__  s     	T67G[(!&| 	 	M 	M 	M!$'''$o6!00I;>0I|3LL)7(8	: :rA   rL   r   c                   t                                                      }|                     d          }t          j        |                     |          ddg d          ||<   |                     d          }||         }t          |t          j                  s
J d            |                    g dd	
           |S )NrH   r   r   r   r   r>   r   )r.   r0   r3   r4   r5   Tr;   )	r   r   r   r   r  r	  r  r   set_versionsr_   r   r   std_optr   s       r?   r   zArmclangCPPCompiler.get_options  s    ww""$$''--+!!#&&*777	9 9 9S	 ''..s)'7#899EE:EEEJJJPTUUUrA   r  r-   r   r*   r  c                "   g }|                      d|||          }t          |t                    sJ |dk    r|                    d|z              |                      d|||          }t          |t                    sJ t	          ||           |S )Nr>   rO   r   rH   )r  r  rI   rU   rW   )r_   r  r   r  rJ   r>   rH   s          r?   r  z'ArmclangCPPCompiler.get_option_std_args  s    ((VZHH#s#####&==KK#&&&''c6:FF"c"""""B%%%rA   r  r|   c                    g S r8  r<   r_   r  r   r  s       r?   r'  z(ArmclangCPPCompiler.get_option_link_args      	rA   r   r   r   r8  r:  r9  )	r   r   r   r   ro   r   r  r'  r   r   s   @r?   rK  rK    s          8<15: : : : :                  rA   rK  c                  ^     e Zd Z	 	 	 d&d'dZd( fdZd)d*dZd)d+dZd)d*d Zd,d"Zd-d%Z	 xZ
S ).GnuCPPCompilerNrb   rK   rc   rd   rI   re   r,   rf   rg   rh   ri   rj   rk   r   r   rl   rm   c
                    t                               | ||||||||		  	         t          j        | |           ddg}
g |
|
dgz   |
ddgz   |
ddgz   |                     t                    z   |                     t
                    z   d| _        d S )Nr   r   r   r   r   r   )rY   ro   r   supported_warn_argsr   r   r   r   s              r?   ro   zGnuCPPCompiler.__init__  s    
 	T67G[(!&| 	 	M 	M 	MT7+++$o6!00I;>0I|3LL):i=V)V)-)A)ABY)Z)Z*[)-)A)ABV)W)W*X	Z ZrA   rL   r   c                   t                                                      }|                     d          }t          j        |                     |          ddg d          ||<   |                     d          }t          j        |                     |          dd          ||<   |                     d	          }t          j        |                     |          d
d          ||<   | j                                        s| j        	                                rG|
                    d          }t          j        |                     |          dt                    ||<   |S )NrH   r   r   r   r   r  r  Tr  r  Fcpp_winlibs)rZ   r  )r   r   r   r   r  r	  r
  rh   r  r  evolver  r
   r   s      r?   r   zGnuCPPCompiler.get_options  s^   ww""$$''--+!!#&&*777	9 9 9S	 ''//-!!#&& S	
 ''
33-!!#&& S	
 9!! 	TY%8%8%:%: 	**-*00C5%%c**8 DI
 rA   r  r  r   r|   r  c                   g }|                      d|||          }|                      d|||          }|                      d|||          }t          |t                    sJ t          |t                    sJ t          |t                    sJ t	          ||           |s|                    d           |r|                    d           |S )Nr  r  rH   r  r  )r  r  rg   rI   rW   rU   r  s           r?   r  z&GnuCPPCompiler.get_option_compile_args  s    ))&#vzJJ--j#vzRR''c6:FF$%%%%%"c"""""(D)))))B%%% 	%KK$$$ 	.KK,---rA   r-   r*   c                    g }|                      d|||          }t          |t                    sJ |dk    r(|                    |                     |                     |S r  r  r  s         r?   r  z"GnuCPPCompiler.get_option_std_args  r  rA   c                   | j                                         s| j                                         rW|                     d|||          }t	          |t
                    sJ |d d          }|D ]}t	          |t                    sJ |S g S r   r!  r#  s          r?   r'  z#GnuCPPCompiler.get_option_link_args  s    9!! 	TY%8%8%:%: 	//	3
SSFfd+++++ &qqq	D * *!!S))))))K	rA   r(  c                    |rdgS dD ] }| j                             |          g c S !|                     |          dk    rdgS t          | j        d          rdgS t          | j        d          rdgS g S r*  r.  r/  s       r?   r1  zGnuCPPCompiler.get_assert_args  r2  rA   r3  r   c                F    ddt           j                            |          gS )Nz-fpch-preprocessz-include)ospathbasename)r_   r3  r   s      r?   r5  zGnuCPPCompiler.get_pch_use_args  s    "J0@0@0H0HIIrA   r6  r7  r   r8  r9  r:  r;  r<  r=  r   s   @r?   rX  rX    s         8<9=15	Z Z Z Z Z"     >    (    	 	 	 	 	   &J J J J J J J JrA   rX  c                      e Zd Z	 	 dddZdS )PGICPPCompilerNrb   rK   rc   rd   rI   re   r,   rf   rg   rh   ri   rj   rk   rl   rm   c	                t    t                               | ||||||||	  	         t          j        |            d S Nr   rY   ro   r"   rp   s	            r?   ro   zPGICPPCompiler.__init__$  N     	T67G[(!&| 	 	M 	M 	MT"""""rA   r   r   )r   r   r   ro   r<   rA   r?   rg  rg  #  s5         8<15# # # # # # #rA   rg  c                  2     e Zd ZdZ	 	 dddZd fdZ xZS )NvidiaHPC_CPPCompiler
nvidia_hpcNrb   rK   rc   rd   rI   re   r,   rf   rg   rh   ri   rj   rk   rl   rm   c	                t    t                               | ||||||||	  	         t          j        |            d S ri  rj  rp   s	            r?   ro   zNvidiaHPC_CPPCompiler.__init__1  rk  rA   rL   r   c                    t                                                      }g d}||                     d                   }t          |t          j                  s
J d            |                    |           |S )N)r.   r0   r3   r4   r5   r7   r8   gnu++98gnu++03r   r   r   r   r>   r   r   r   r   r  r   r   rP  )r_   r   cppstd_choicesrR  r   s       r?   r   z!NvidiaHPC_CPPCompiler.get_options9  s}    ww""$$
 
 
 t00778'7#899EE:EEE^,,,rA   r   r   r   r   r   r   r   ro   r   r   r   s   @r?   rm  rm  -  sc        	B 8<15# # # # #	 	 	 	 	 	 	 	 	 	rA   rm  c                  X     e Zd Z	 	 	 d)d*dZd+ fdZdddd, fd!Zd-d.d%Zd-d/d(Z xZS )0ElbrusCPPCompilerNrb   rK   rc   rd   rI   re   r,   rf   rg   rh   ri   rj   rk   r   r   rl   rm   c
                t    t                               | ||||||||		  	         t          j        |            d S ri  )rY   ro   r!   rF  s
             r?   ro   zElbrusCPPCompiler.__init__F  sN    
 	T67G[(!&| 	 	M 	M 	M%%%%%rA   rL   r   c                   t                                                      }|                     d          }t          j        |                     |          ddg d          ||<   |                     d          }t          j        |                     |          dd          ||<   d	g}t          | j        d
          r|g dz  }t          | j        d          rt          | j        d          r|ddgz  }t          | j        d          r|dgz  }t          | j        d          r|dgz  }t          | j        d          r|ddgz  }t          | j        d          r|dgz  }t          | j        d          r|dgz  }|                     d          }||         }t          |t          j
                  s
J d            |                    |d           |S )NrH   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   TrO  )r   r   r   r   r  r	  r
  r   rd   r  r   rP  )r_   r   r   cpp_stdsrR  r   s        r?   r   zElbrusCPPCompiler.get_optionsO  s   ww""$$''--+!!#&&*777	9 9 9S	 ''
33-!!#&& S	
 94<55 	433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''..s)'7#899EE:EEEX4000rA   r   funcnamer   r   r|   r   T.Optional[T.List[str]]r   r   r   c               `    |dk    rdS t                                          |||||          S )Nlchmod)FFr   )r   has_function)r_   r{  r   r   r   r   r   s         r?   r  zElbrusCPPCompiler.has_functionw  sE     x<77''&#3=5A ( C C CrA   r  r  r  c                   g }|                      d|||          }t          |t                    sJ t          ||           |                      d|||          }t          |t                    sJ |r|                    d           |S )NrH   r  r  )r  r  rI   rW   rU   )r_   r  r   r  rJ   rH   r  s          r?   r  z)ElbrusCPPCompiler.get_option_compile_args  s    ''c6:FF"c"""""B%%%--j#vzRR(C((((( 	.KK,---rA   r-   r*   c                    g }|                      d|||          }t          |t                    sJ |dk    r(|                    |                     |                     |S r  r  r  s         r?   r  z%ElbrusCPPCompiler.get_option_std_args  r  rA   r6  r7  r   )r{  rI   r   rI   r   r|   r   r|  r   r   rL   r   r8  r9  r:  )	r   r   r   ro   r   r  r  r  r   r   s   @r?   rw  rw  E  s         8<9=15	& & & & &$ $ $ $ $ $R <@FJC C C C C C C C            rA   rw  c                  L     e Zd Z	 	 dd dZd! fdZd"d#dZd"d$dZd"d#dZ xZS )%IntelCPPCompilerNrb   rK   rc   rd   rI   re   r,   rf   rg   rh   ri   rj   rk   rl   rm   c	                    t                               | ||||||||	  	         t          j        |            d| _        g d}	g |	dgz   |	ddgz   |	ddgz   |	dgz   d| _        d S )Nr   z
c++-header)r   z-w3z-Wpch-messagesz-diag-disable:remarkr   r   )rY   ro   r   lang_headerr   rM  s
             r?   ro   zIntelCPPCompiler.__init__  s     	T67G[(!&| 	 	M 	M 	M%d+++'>>>!04J3KK0I?U3VV0I?U3VV(9YK(G	I IrA   rL   r   c                
   t                                                      }|                     d          }t          j        |                     |          ddg d          ||<   |                     d          }t          j        |                     |          dd          ||<   |                     d	          }t          j        |                     |          d
d          ||<   ddg}ddg}t          | j        d          r|ddgz  }|dgz  }t          | j        d          r|dgz  }t          | j        d          r|dgz  }t          | j        d          r|dgz  }|dgz  }| 	                    |||z              |S )NrH   r   r   r   r   r  r  Tr  r  Fr.   r0   rq  rr  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   rd   _update_language_stds)r_   r   r   c_stdsg_stdsr   s        r?   r   zIntelCPPCompiler.get_options  s   ww""$$''--+!!#&&*777	9 9 9S	 ''//-!!#&& S	
 ''
33-!!#&& S	 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99rA   r  r  r   r|   r  c                   g }|                      d|||          }|                      d|||          }|                      d|||          }t          |t                    sJ t          |t                    sJ t          |t                    sJ |dk    r|                    d           |r|                    d           |r|                    d           |S )Nr  r  rH   rO   rP   r  r  r  r  rg   rI   rU   r  s           r?   r  z(IntelCPPCompiler.get_option_compile_args  s    ))&#vzJJ--j#vzRR''c6:FF$%%%%%"c"""""(D)))))<<KK)*** 	%KK$$$ 	.KK,---rA   r-   r*   c                    g }|                      d|||          }t          |t                    sJ |dk    r1ddd}|                    d|                    ||          z              |S )Nr>   rO   r.   rq  )r0   rr  r   )r  r  rI   rU   r]   )r_   r  r   r  rJ   r>   remap_cpp03s          r?   r  z$IntelCPPCompiler.get_option_std_args  s}    ((VZHH#s#####&== $ K KK+//#s";";;<<<rA   c                    g S r8  r<   rU  s       r?   r'  z%IntelCPPCompiler.get_option_link_args  rV  rA   r   r   r   r8  r9  r:  )	r   r   r   ro   r   r  r  r'  r   r   s   @r?   r  r    s         8<15I I I I I' ' ' ' ' 'R    &            rA   r  c                      e Zd ZdZdS )IntelLLVMCPPCompilerr   Nr@  r<   rA   r?   r  r    s        	BBBrA   r  c                  f     e Zd ZdZdddddddd	d
dddZd#d$dZd% fdZd#d$dZd#d&dZd'd"Z	 xZ
S )( VisualStudioLikeCPPCompilerMixinz?Mixin for C++ specific method overrides in MSVC-like compilers.)TN)T   )T   )T   )T   )Tlatest)Fr  )Fr  )Fr  )Fr  )Fr  )rO   rB   rC   rD   rE   rF   r3   r4   r5   r7   rG   Nr  r  r   r|   r  rm   rL   rK   c                   |                      d                              |          }|r|j                            ||          }n|j        j                            |          }t          j        d|          d d          S )Nr  r  rK   )r   r]  coredataget_option_for_targetoptstoreget_value_forTcast)r_   r  r   r  r   values         r?   r'  z5VisualStudioLikeCPPCompilerMixin.get_option_link_args  sz    ''	2299Z9PP 	=L66vsCCEEL)77<<EvmU++AAA..rA   r   r   rz  c                   t                                                      }|                     d          }t          j        |                     |          ddg d          ||<   |                     d          }t          j        |                     |          dd          ||<   |                     d	          }t          j        |                     |          d
t                    ||<   ||                     d                   }t          |t          j
                  s
J d            |                    |           |S )NrH   r   r   r   r   r  r  Tr  r  r>   r   )r   r   r   r   r  r	  r
  r  r   r  r   rP  )r_   r   rz  r   rR  r   s        r?   _get_options_implz2VisualStudioLikeCPPCompilerMixin._get_options_impl  s>   ww""$$''--+!!#&&*777	9 9 9S	 ''//-!!#&& S	
 ''	221!!#&&4 S	
 t00778'7#899EE:EEEX&&&rA   c                   g }|                      d|||          }|                      d|||          }t          |t                    sJ t          |t                    sJ |dk    r|                    d           n4|dk    r|                    d           n|                    d|z              |s|                    d           |S )	NrH   r  r   z/EHscrO   z/EHs-c-z/EHz/GR-r  )r_   r  r   r  rJ   rH   r  s          r?   r  z8VisualStudioLikeCPPCompilerMixin.get_option_compile_args0  s    ''c6:FF))&#vzJJ$%%%%%"c"""""??KK    6\\KK	""""KK
### 	 KKrA   r-   r*   c                    g }|                      d|||          }t          |t                    sJ | j        |         \  }}||                    d|            |s|                    d           |S )Nr>   z/std:c++/permissive-)r  r  rI   VC_VERSION_MAPrU   )r_   r  r   r  rJ   r>   
permissivevers           r?   r  z4VisualStudioLikeCPPCompilerMixin.get_option_std_argsE  s    ((VZHH#s#####-c2
C?KK(3(())) 	(KK'''rA   r   r   c                ,    t          j        | |          S r8  )r   r   r_   r   s     r?   r   z8VisualStudioLikeCPPCompilerMixin.get_compiler_check_argsQ  s    /d;;;rA   r8  r9  )r   r   rz  rK   rL   r   r:  r   )r   r   r   r   r  r'  r  r  r  r   r   r   s   @r?   r  r    s        II && N/ / / / /     6    *
 
 
 
 
< < < < < < < <rA   r  c                  &     e Zd ZdZdd fdZ xZS )CPP11AsCPP14MixinzMixin 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.
    Nr  r-   r   r*   r  rm   rL   rK   c                   |                      d                              |          }||j                            ||          }n|j        j                            |          }|dv rt          j        | j        dddd           t                      
                    |||          }d	d
ifd|D             }|S )Nr>   r  >   r3   rB   zdoes not support C++11;z5attempting best effort; setting the standard to C++14TF)oncerT   z
/std:c++11z
/std:c++14c                <    g | ]}                     ||          S r<   )r]   )r=   xstd_mappings     r?   r@   z9CPP11AsCPP14Mixin.get_option_std_args.<locals>.<listcomp>l  s'    GGGA+//!Q//GGGrA   )r   r]  r  r  r  r  r   rV   r   r   r  )
r_   r  r   r  stdkeyr>   original_argsprocessed_argsr  r   s
           @r?   r  z%CPP11AsCPP14Mixin.get_option_std_args\  s    
 **51188J8OO,44VVDDCC,'55f==C%%%L";P"%1 1 1 1 33FCLL#\2GGGGGGGrA   r8  r:  )r   r   r   r   r  r   r   s   @r?   r  r  U  sL         
          rA   r  c                  @     e Zd ZdZ	 	 dddZd fdZdd  fdZ xZS )!VisualStudioCPPCompilermsvcNrb   rK   rc   rd   rI   re   r,   rf   rg   rh   ri   r  rj   rk   rl   rm   c
                    t                               | ||||||||		  	         t          j        | |           t          | j        d          r| j        dgz   | _        d S d S )Nr   z>= 19.14.26428z/Zc:__cplusplus)rY   ro   r   r   rd   always_args)
r_   rb   rc   rd   re   rf   rh   r  rj   rl   s
             r?   ro   z VisualStudioCPPCompiler.__init__t  s     	T67G[(!&| 	 	M 	M 	MdF+++
 4<)9:: 	F#/3D2EED	F 	FrA   rL   r   c                |   g d}t          | j        d          r|                    g d           t          | j        d          r|                    g d           t          | j        d          r|                    ddg           |                     t	                                                      |          S )	N)rO   r3   rB   z>=19)r4   rG   rF   z>=19.11)rC   r5   rD   z>=19.29r7   rE   )r   rd   extendr  r   r   r_   rz  r   s     r?   r   z#VisualStudioCPPCompiler.get_options  s    ...4<00 	BOO@@@AAA4<33 	;OO999:::4<33 	1OOWh/000%%egg&9&9&;&;XFFFrA   r-   r   r*   r  c                b   |                      d|||          }|dk    r+t          | j        d          rt          j        dd           t                                          |||          }t          | j        d          r,	 |                    d          }n# t          $ r |cY S w xY w||= |S )	Nr>   rO   z<19.00.24210z7This version of MSVC does not support cpp_std argumentsFrS   z<19.11r  )	r  r   rd   r   rV   r   r  index
ValueError)r_   r  r   r  r>   rJ   r   r   s          r?   r  z+VisualStudioCPPCompiler.get_option_std_args  s    ((VZHH&==_T\>JJ=LRZ_````ww**63
CC4<22 	JJ~..   Qs   B B)(B)r   )rb   rK   rc   rK   rd   rI   re   r,   rf   rg   rh   ri   r  rI   rj   rk   rl   rm   r   r8  r:  )r   r   r   r   ro   r   r  r   r   s   @r?   r  r  p  s        	B 8<15F F F F F
G 
G 
G 
G 
G 
G          rA   r  c                  2     e Zd ZdZ	 	 dddZd fdZ xZS )ClangClCPPCompilerzclang-clNrc   rK   rd   rI   re   r,   rf   rg   rh   ri   r  rj   rk   rl   rm   c	                v    t                               | g |||||||	  	         t          j        | |           d S ri  )rY   ro   r   	r_   rc   rd   re   rf   rh   r  rj   rl   s	            r?   ro   zClangClCPPCompiler.__init__  sP     	T2wh!&| 	 	M 	M 	M v.....rA   rL   r   c                t    g d}|                      t                                                      |          S )N)
rO   r3   rB   r4   rC   r5   rD   r7   rE   rG   )r  r   r   r  s     r?   r   zClangClCPPCompiler.get_options  s4    ttt%%egg&9&9&;&;XFFFrA   r   rc   rK   rd   rI   re   r,   rf   rg   rh   ri   r  rI   rj   rk   rl   rm   r   ru  r   s   @r?   r  r    sm        	B 8<15/ / / / /G G G G G G G G G GrA   r  c                  6     e Zd Z	 	 dddZd fdZddZ xZS )IntelClCPPCompilerNrc   rK   rd   rI   re   r,   rf   rg   rh   ri   r  rj   rk   rl   rm   c	                v    t                               | g |||||||	  	         t          j        | |           d S ri  )rY   ro   r   r  s	            r?   ro   zIntelClCPPCompiler.__init__  sP     	T2wh!&| 	 	M 	M 	M%.tV<<<<<rA   rL   r   c                    t          | j        d          rg d}ng d}t          | j        d          r|dgz  }|                     t                                                      |          S )Nz	<2021.1.0)rO   r3   rB   r4   rC   r5   rD   rG   )rO   r4   r5   rG   z
>=2024.1.0r7   )r   rd   r  r   r   r  s     r?   r   zIntelClCPPCompiler.get_options  su    4<55 	?eeeHH>>>H4<66 	"	!H%%egg&9&9&;&;XFFFrA   r   r   c                ,    t          j        | |          S r8  )r   r   r  s     r?   r   z*IntelClCPPCompiler.get_compiler_check_args  s    ,DT4PPPrA   r   r  r   r   )r   r   r   ro   r   r   r   r   s   @r?   r  r    s         8<15= = = = =G G G G G GQ Q Q Q Q Q Q QrA   r  c                      e Zd ZdZdS )IntelLLVMClCPPCompilerzintel-llvm-clNr@  r<   rA   r?   r  r    s        	BBBrA   r  c                  J     e Zd Z	 	 d!d"dZd# fdZd$d%dZd$d&dZd'd Z xZS )(ArmCPPCompilerNrb   rK   rc   rd   rI   re   r,   rf   rg   rh   ri   rj   rk   rl   rm   c	                t    t                               | ||||||||	  	         t          j        |            d S ri  )rY   ro   r   rp   s	            r?   ro   zArmCPPCompiler.__init__  rk  rA   rL   r   c                    t                                                      }|                     d          }t          |t          j                  s
J d            |                    ddg           |S )Nr>   r   r0   r3   rs  )r_   r   rR  r   s      r?   r   zArmCPPCompiler.get_options  sj    ww""$$++E22'7#899EE:EEEgw/000rA   r  r-   r   r*   r  c                    g }|                      d|||          }t          |t                    sJ |dk    r|                    d           n|dk    r|                    d           |S )Nr>   r3   z--cpp11r0   z--cppr  r  rI   rU   r  s         r?   r  z"ArmCPPCompiler.get_option_std_args  st    ((VZHH#s#####'>>KK	""""G^^KK   rA   r  r|   c                    g S r8  r<   rU  s       r?   r'  z#ArmCPPCompiler.get_option_link_args  rV  rA   r   r   c                    g S r8  r<   r  s     r?   r   z&ArmCPPCompiler.get_compiler_check_args  rV  rA   r   r   r   r8  r:  r9  r   )	r   r   r   ro   r   r  r'  r   r   r   s   @r?   r  r    s         8<15# # # # #                    rA   r  c                  F    e Zd Z	 	 d d!dZd"dZd"dZd#dZd$d%dZd&dZdS )'CcrxCPPCompilerNrb   rK   rc   rd   rI   re   r,   rf   rg   rh   ri   rj   rk   rl   rm   c	                t    t                               | ||||||||	  	         t          j        |            d S ri  )rY   ro   r   rp   s	            r?   ro   zCcrxCPPCompiler.__init__  sN     	T67G[(!&| 	 	M 	M 	Md#####rA   rL   c                
    ddgS )Nz-nologoz	-lang=cppr<   ru   s    r?   get_always_argszCcrxCPPCompiler.get_always_args  s    ;''rA   c                    g S r8  r<   ru   s    r?   get_compile_only_argsz%CcrxCPPCompiler.get_compile_only_args  rV  rA   
outputnamec                    d| gS )Nz-output=obj=r<   )r_   r  s     r?   get_output_argszCcrxCPPCompiler.get_output_args  s    +z++,,rA   r  r  r   r|   r  c                    g S r8  r<   rU  s       r?   r'  z$CcrxCPPCompiler.get_option_link_args   rV  rA   r   r   c                    g S r8  r<   r  s     r?   r   z'CcrxCPPCompiler.get_compiler_check_args  rV  rA   r   r   r   )r  rI   rL   rK   r8  r9  r   )	r   r   r   ro   r  r  r  r'  r   r<   rA   r?   r  r    s         8<15$ $ $ $ $( ( ( (   - - - -         rA   r  c                  J     e Zd Z	 	 dd dZd! fdZd"d#dZd$dZd"d%dZ xZS )&TICPPCompilerNrb   rK   rc   rd   rI   re   r,   rf   rg   rh   ri   rj   rk   rl   rm   c	                t    t                               | ||||||||	  	         t          j        |            d S ri  )rY   ro   r   rp   s	            r?   ro   zTICPPCompiler.__init__  sN     	T67G[(!&| 	 	M 	M 	MD!!!!!rA   rL   r   c                    t                                                      }|                     d          }||         }t          |t          j                  s
J d            |                    dg           |S )Nr>   r   r0   rs  rQ  s       r?   r   zTICPPCompiler.get_options  sp    ww""$$''..s)'7#899EE:EEEgY'''rA   r  r-   r   r*   r  c                    g }|                      d|||          }t          |t                    sJ |dk    r|                    d|z              |S )Nr>   rO   z--r  r  s         r?   r  z!TICPPCompiler.get_option_std_args  sZ    ((VZHH#s#####&==KKs
###rA   c                    g S r8  r<   ru   s    r?   r  zTICPPCompiler.get_always_args  rV  rA   r  r|   c                    g S r8  r<   rU  s       r?   r'  z"TICPPCompiler.get_option_link_args"  rV  rA   r   r   r   r8  r:  r   r9  )	r   r   r   ro   r   r  r  r'  r   r   s   @r?   r  r    s         8<15" " " " "                    rA   r  c                      e Zd ZdZdS )C2000CPPCompilerc2000Nr@  r<   rA   r?   r  r  %  s        	BBBrA   r  c                      e Zd ZdZdS )C6000CPPCompilerc6000Nr@  r<   rA   r?   r  r  )  s        	BBBrA   r  c                  D     e Zd ZdZ	 	 dd dZd!dZd" fdZd#d$dZ xZS )%MetrowerksCPPCompilerARMmwccarmNrb   rK   rc   rd   rI   re   r,   rf   rg   rh   ri   rj   rk   rl   rm   c	                t    t                               | ||||||||	  	         t          j        |            d S ri  rY   ro   r$   rp   s	            r?   ro   z!MetrowerksCPPCompilerARM.__init__/  N     	T67G[(!&| 	 	M 	M 	M#D)))))rA   instruction_setrL   r|  c                ,    t          j        |d           S r8  )r%   r]   r_   r  s     r?   get_instruction_set_argsz1MetrowerksCPPCompilerARM.get_instruction_set_args7  s    +/FFFrA   r   c                t    t                                                      }|                     |g            |S r8  r   r   r  r_   r   r   s     r?   r   z$MetrowerksCPPCompilerARM.get_options:  3    ww""$$""4,,,rA   r  r-   r   r*   r  c                    g }|                      d|||          }t          |t                    sJ |dk    r*|                    d           |                    |           |S )Nr>   rO   z-langr  r  s         r?   r  z,MetrowerksCPPCompilerARM.get_option_std_args?  sh    ((VZHH#s#####&==KK   KKrA   r   r   r  rI   rL   r|  r   r8  r:  	r   r   r   r   ro   r  r   r  r   r   s   @r?   r  r  ,  s        	B 8<15* * * * *G G G G     
        rA   r  c                  D     e Zd ZdZ	 	 dd dZd!dZd" fdZd#d$dZ xZS )%$MetrowerksCPPCompilerEmbeddedPowerPCmwcceppcNrb   rK   rc   rd   rI   re   r,   rf   rg   rh   ri   rj   rk   rl   rm   c	                t    t                               | ||||||||	  	         t          j        |            d S ri  r  rp   s	            r?   ro   z-MetrowerksCPPCompilerEmbeddedPowerPC.__init__K  r  rA   r  rL   r|  c                ,    t          j        |d           S r8  )r&   r]   r  s     r?   r  z=MetrowerksCPPCompilerEmbeddedPowerPC.get_instruction_set_argsS  s    ,0$GGGrA   r   c                t    t                                                      }|                     |g            |S r8  r  r  s     r?   r   z0MetrowerksCPPCompilerEmbeddedPowerPC.get_optionsV  r  rA   r  r-   r   r*   r  c                    g }|                      d|||          }t          |t                    sJ |dk    r|                    d|z              |S )Nr>   rO   z-lang r  r  s         r?   r  z8MetrowerksCPPCompilerEmbeddedPowerPC.get_option_std_args[  sZ    ((VZHH#s#####&==KK3'''rA   r   r   r  r   r8  r:  r  r   s   @r?   r   r   H  s        	B 8<15* * * * *H H H H     
        rA   r   )rH   rI   rJ   rK   rL   rM   )d
__future__r   r   os.pathrc  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)   r{   r*   linkers.linkersr+   r,   buildr-   CompilerMixinBaseobjectr   rW   rY   r   r   r?  rB  rD  rK  rX  rg  rm  rw  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r<   rA   r?   <module>r     s   # " " " " "                      6 6 6 6 6 6 6 6            J I I I I I I I ? ? ? ? ? ? ? ? ' ' ' ' ' ' % % % % % % ! ! ! ! ! ! 5 5 5 5 5 5 5 5 > > > > > > > > ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ M M M M M M M M 5 5 5 5 5 5 5 5 ) ) ) ) ) ) # # # # # # . . . . . . 1 1 1 1 1 1 Z Z Z Z Z Z Z Z? 
444444))))))''''''))))))//////((((((######%www 11111 1 OOO OL L L Lx x x x x- x x xv#o #o #o #o #o' #o #o #oLt t t t tm[ t t tn    -   
	 	 	 	 	.0ACS 	 	 	         O-=      F1 1 1 1 1*K 1 1 1hlJ lJ lJ lJ lJ_j+{ lJ lJ lJ^# # # # #[+ # # #    K   0P P P P P P P PfZ Z Z Z Z+[ Z Z Zz    +   
Y< Y< Y< Y< Y<'8 Y< Y< Y<v    )   6+ + + + +/1QS_al + + +ZG G G G G*,Lo_j G G G"Q Q Q Q Q9;XZe Q Q Q2    /   
    [+   B    lK   2    J   >    }       }       1;   8    +={     rA   