
    -Ph                       U d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dl	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 dd	lmZmZmZmZmZmZ dd
lmZ ddlmZ e
j        rJddl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( ddl)m*Z* ddlm+Z+ ddl,m-Z-  e
j.        dd          Z/ e
j.        d          Z0	 h dZ1h dZ2h dZ3i ddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;Z4d<e5d=<   e46                                Z7d>hZ8 e9e4d                   e8z  Z: e9e4d                   e8z  Z;h d?Z<d@hZ= e9 ej>        g e4?                                e<e=e8R            Z@e@e1z
  ZAdAZBdBeBz   ZC eD ej>        dC e4E                                D                        ZFh dDZGh dEZH ejI        dF          ZJdGdHdIdJdKdLdMdNdOdPdQdRZKdSe5dT<   ddYZLdd]ZMdd_ZN ed`          dda            ZOddbZPddcZQddeZRddfZS ed`          ddg            ZTddhZUddiZVddjZW G dk dlejX                  ZYg dmZZg dnZ[g g g dogdpgdqgdrgdsZ\dte5du<   g dvgdwZ]dxe5dy<   ddZ^ddZ_ddZ`ddZaddZbddZc G d de          Zde G d de                      Zee G d de                      Zf G d deejg                  ZhddZidS )    )annotationsN)	dataclassfield)	lru_cache   )mlog)mesonlib)options)HoldableObjectEnvironmentExceptionMesonExceptionPopen_safe_loggedLibTypeTemporaryDirectoryWinProof)	OptionKeyCompilerArgs)coredata)BuildTarget	DFeatures)MutableKeyedOptionDictType)MachineInfo)Environment)RSPFileSyntax)DynamicLinker)MachineChoice)
DependencyCompilerTypeCompiler)bound_T>	   Hhdihhhpphxxippmocvapi>   oobjres>   dll.aajssodlllibdylibc)r5   cpp)r6   cppmcccpcxxzc++r%   hpr&   r(   r'   zh++inoixxCPPCHPPr"   cuda)cufortran)f90f95f03f08fforftnfppd)rL   r$   objc)mobjcpp)mmrust)rsvala)rS   r*   gscs)rU   swift)rV   java)rW   cython)pyxnasm)asmrZ   masm)r\   	linearasm)saz!T.Mapping[str, T.Tuple[str, ...]]lang_suffixesr#   >   Sssxr[   r\   ll)rO   r6   rM   r5   rZ   rC   )rL   rA   c              #  :   K   | ]\  }fd |D             V  dS )c                    g | ]}|fS  rf   ).0suffixlangs     ^/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mesonbuild/compilers/compilers.py
<listcomp>z<genexpr>.<listcomp>Z   s    $$$fd^$$$    Nrf   )rg   vri   s     @rj   	<genexpr>rn   Y   sU       (K (K)0q$$$$!$$$(K (K (K (K (K (Krl   >   r5   rL   r6   rA   rM   rO   rC   >   r5   r6   rM   rO   z(.*\.so(\.[0-9]+)?(\.[0-9]+)?(\.[0-9]+)?$CFLAGSCXXFLAGSCUFLAGS	OBJCFLAGSOBJCXXFLAGSFFLAGSDFLAGS	VALAFLAGS	RUSTFLAGSCYTHONFLAGSCSFLAGS)r5   r6   rA   rM   rO   rC   rL   rS   rQ   rX   rU   zT.Mapping[str, str]CFLAGS_MAPPINGri   strreturnintc                N    | t           vrdS t                               |            S )a"  
    Sorting function to sort the list of languages according to
    reversed(compilers.clink_langs) and append the unknown langs in the end.
    The purpose is to prefer C over C++ for files that can be compiled by
    both such as assembly, C, etc. Also applies to ObjC, ObjC++, etc.
       )clink_langsindex)ri   s    rj   
sort_clinkr   s   s+     ;qd####rl   fname'mesonlib.FileOrString'boolc                    t          | t          j                  r| j        } |                     d          d         }|t
          v S N.)
isinstancer	   Filer   splitheader_suffixesr   rh   s     rj   	is_headerr   ~   s>    %'' [[b!F_$$rl   rh   c                    | t           v S N)source_suffixes)rh   s    rj   is_source_suffixr      s    _$$rl   maxsizec                z    |                      d          d                                         }t          |          S r   )r   lowerr   r   s     rj   cached_is_source_by_namer      s2    [[b!''))FF###rl   c                b    t          | t          j                  r| j        } t	          |           S r   )r   r	   r   r   r   r   s    rj   	is_sourcer      +    %'' #E***rl   c                    t          | t          j                  r| j        } |                     d          d         }|t
          v S r   )r   r	   r   r   r   assembler_suffixesr   s     rj   is_assemblyr      s?    %'' [[b!F'''rl   mesonlib.FileOrStringc                    t          | t          j                  r| j        } |                     d          d         }|t
          d         v S )Nr   r   rW   )r   r	   r   r   r   r_   r   s     rj   is_javar      sC    %'' [[b!F]6***rl   c                    t          | t          j                  r| j        } |                     d          d         }|t
          v S r   )r   r	   r   r   r   llvm_ir_suffixesr   s     rj   
is_llvm_irr      s?    %'' [[b!F%%%rl   c                J    |                      d          d         }|t          v S r   )r   obj_suffixesr   s     rj   cached_is_object_by_namer      s#    [[b!F\!!rl   c                b    t          | t          j                  r| j        } t	          |           S r   )r   r	   r   r   r   r   s    rj   	is_objectr      r   rl   c                    t          | t          j                  r| j        } t                              |           rdS |                     d          d         }|t          v S )NTr   r   )r   r	   r   r   soregexmatchr   lib_suffixesr   s     rj   
is_libraryr      sW    %'' }}U t[[b!F\!!rl   c                    t          | t          j                  r| j        } |                     d          d         }|t
          v S r   )r   r	   r   r   r   all_suffixesr   s     rj   is_known_suffixr      s>    %'' [[b!F\!!rl   c                      e Zd ZdZdZdZdS )CompileCheckMode
preprocesscompilelinkN)__name__
__module____qualname__
PREPROCESSCOMPILELINKrf   rl   rj   r   r      s        JGDDDrl   r   )
z
-lkernel32z-luser32z-lgdi32z
-lwinspoolz	-lshell32z-lole32z
-loleaut32z-luuidz
-lcomdlg32z
-ladvapi32)
zkernel32.libz
user32.libz	gdi32.libzwinspool.libzshell32.libz	ole32.libzoleaut32.libzuuid.libzcomdlg32.libzadvapi32.libz-O1z-O2z-O3z-Os)plain0g123ra   T.Dict[str, T.List[str]]clike_optimization_argsz-g)FTzT.Dict[bool, T.List[str]]clike_debug_argsboptionsT.Set[OptionKey]target'BuildTarget'env'Environment'optionT.Union[str, OptionKey]c                    t          |t                    rt          |          }	 || vrdS |j                            ||          }t          |t
                    s
J d            |S # t          $ r Y dS w xY w)NFzmust return bool)r   r{   r   r   get_option_for_targetr   KeyError)r   r   r   r   rets        rj   option_enabledr      s     &# #6""!!5l00@@#t$$88&8888
   uus   A( ;A( (
A65A6optr   fallback'_T'c                    	 | j                             ||          }n# t          t          f$ r |cY S w xY wt	          |t          |                    s*J dt          |          dt          |                      |S )z2Get the value of an option, or the fallback value.zShould have z	 but was )r   r   r   AttributeErrorr   type)r   r   r   r   rm   s        rj   get_option_value_for_targetr      s    L..vs;;n%    ah((__*_h*_*_TXYZT[T[*_*____Hs    44c                    |j                             | d          dk    p;|j                             | d          dk    o|j                             | d          dv S )zShould debug assertions be disabled

    :param target: a target to check for
    :param env: the environment
    :return: whether to disable assertions or not
    b_ndebugtrue
if-release	buildtype>   r   release)r   r   )r   r   s     rj   are_asserts_disabledr      se     L..vzBBfL ^\//
CC|S ]\//DDH\\_rl   
subprojectc                   t          d|           }|j        j                            |          dk    pW|j        j                            |          dk    o4|j        j                            |                    d                    dv S )Nr   r   r   r   )name>   r   r   )r   r   optstoreget_value_forevolve)r   r   keys      rj   #are_asserts_disabled_for_subprojectr     s    
J

+
+CL!//44> h\"0055E g\"001M1MNNRffirl   compiler
'Compiler'T.List[str]c                2   g }	 |j                             | d          rht          || t          d          d          }t          || t          d          d          }|                    |                    ||                     n# t          t          f$ r Y nw xY w	 |j                             | d          }t          |t                    sJ ||
                    |          z  }n# t          $ r Y nw xY w	 |j                             | d          }t          |t                    sJ |d	gk    rg }|                    |          }|rX|                    ||          d         s't          d
|                                 d|           |                    |           n# t          $ r Y nw xY w	 |j                             | d          }	|	dk    r(|                    |                                           n-|	dk    r'|                    |                                           n# t          t          f$ r Y nw xY w	 |j                             | d          r||                                z  }n# t          t          f$ r Y nw xY w	 ||                    t)          | |          |          z  }n# t          $ r Y nw xY wt+          |j        | |d          r|                    d           	 |j                             | d          }
t          |
t                    sJ |j                             | d          }t          |t                    sJ 	 ||                    |
|          z  }n# t          $ r Y nw xY wn# t          $ r Y nw xY w|S )Nb_ltob_lto_threadsr   
b_lto_modedefaultthreadsmode
b_colorout
b_sanitizenonez	Compiler & does not support sanitizer arguments b_pgogenerateuse
b_coverage	b_bitcodez-fembed-bitcodeb_vscrtr   )r   r   r   r   extendget_lto_compile_argsr   r   r   r{   get_colorout_argslistsanitizer_compile_argshas_multi_argumentsr   name_stringget_profile_generate_argsget_profile_use_argsget_coverage_argsget_assert_argsr   r   base_optionsappendget_crt_compile_args)r   r   r   argsnum_threadsltomodeclroutsanitizesanitize_argspgo_valcrt_valr   s               rj   get_base_compile_argsr    s5   D<--fg>> 	5c69_C]C]_`aaK1#vy?V?VXabbGKK55# 6      n%   33FLII&#&&&&&**6222   <55flKK(D)))))xH 77AA  	'//sCCAF @$%~1E1E1G1G%~%~o|%~%~KK&&&   ,44VWEEj  KK::<<====KK5577888n%   <--flCC 	1H..000Dn%   (()=fc)J)JCPPP    h+VS+FF '%&&&
,44VYGG'3'''''L66v{KK	)S)))))	H11'9EEEDD 	 	 	D	   Ks   BB BB A
C+ +
C87C8<B*F' '
F43F48A6H/ /II2I: :JJ'J: :
KK7A$N M6 5N 6
N N NN 
NNlinkerc                	   g }|                                 }	 |j                            | d          r|j                            | d          r'|                    |                                           d }t          d          }t          || |d          rFt          || t          d          d          }|dk    r!t          j        	                    |dd          }t          || t          d	          d
          }t          || t          d          d          }|                    |
                    |||                     n# t          t          f$ r Y nw xY w	 |j                            | d          }	t          |	t                    sJ |	dgk    rg }	|                    |	          }
|
rX|                    |
|          d
         s't#          d|                                 d|
           |                    |
           n# t          $ r Y nw xY w	 |j                            | d          }|dk    r(|                    |                                           n-|dk    r'|                    |                                           n# t          t          f$ r Y nw xY w	 |j                            | d          r||                                z  }n# t          t          f$ r Y nw xY wt-          |j        | |d          }t-          |j        | |d          }|r3| j        dk    s(|                    |                                           n)|r'|                    |                                           |sddlm} |                    |                                           t          | |          s?t-          |j        | |d          r(|                    |                                           n'|                    |                                           	 |j                            | d          }t          |t@                    sJ |j                            | d          }t          |t@                    sJ 	 |!                    ||          }t          |t                    sJ ||z  }n# t          $ r Y nw xY wn# t          $ r Y nw xY w|S )Nr   werrorb_thinlto_cacheFb_thinlto_cache_dir zmeson-privatezthinlto-cacher   r   r   r   r   r   thinlto_cache_dirr   r   zLinker r   r   r   r   r   
b_asneededr   zshared moduler   )SharedModuleb_lundefr   r   )"get_build_dirr   r   r   get_werror_argsr   r   ospathjoinget_lto_link_argsr   r   r   r  sanitizer_link_argshas_multi_link_argumentsr   r  r  r  get_coverage_link_argsr   r
  typenamebitcode_argsget_asneeded_argsbuildr  headerpad_argsno_undefined_link_argsget_allow_undefined_link_argsr{   get_crt_link_args)r   r  r   r  	build_dirr  cachedir_keyr  lto_mode	sanitizersanitizer_argsr  	as_neededbitcoder  r  r   crtargss                     rj   get_base_link_argsr:  L  sV    D!!##I<--fg>> 	6|11&(CC 6F2244555 $$%677L*3eLL b$?VYWlMmMmoq$r$r!$**(*YQ`(a(a%5c69_C]C]_`aaK23	,@W@WYbccHKK00#"3 1 5 5 6 6 6 n%   L66v|LL	)T*****  I33I>>  	(22>3GGJ }$%{v/A/A/C/C%{%{ky%{%{|||KK'''   ,44VWEEj  KK88::;;;;KK3355666n%   <--flCC 	4F11333Dn%    v2FCNNIV0&#{KKG  0v/99F''))****	 0F,,..///  @((((((F))++,,,6<00 	@v2FCLL	@KK55778888KK<<>>???,44VYGG'3'''''L66v{KK	)S)))))	..w	BBGgt,,,,,GODD 	 	 	D	   Ks   D0E	 	EE!B*H 
HHA6J J('J(,2K K32K3(A$S 2S  ?S  
S
S SS 
SSc                      e Zd ZdS )CrossNoRunExceptionN)r   r   r   rf   rl   rj   r<  r<    s        Drl   r<  c                  R    e Zd ZU ded<   dZded<   dZded<   dZded	<   d
Zded<   dS )	RunResultr   compiledi  r}   
returncode	UNDEFINEDr{   stdoutstderrFcachedN)r   r   r   __annotations__r@  rB  rC  rD  rf   rl   rj   r>  r>    s_         NNNJFFFrl   r>  c                      e Zd ZU dZded<   ded<   ded<   ded<   ded	<    ed
d          Zded<    edd          Zded<   d
S )CompileResultz.The result of Compiler.compiles (and friends).r{   rB  rC  r   commandr}   r@  
input_nameNF)r   initT.Optional[str]output_namer   rD  )r   r   r   __doc__rE  r   rL  rD  rf   rl   rj   rG  rG    s          98KKKKKKOOOOOO#(5E#B#B#BKBBBB5U333F333333rl   rG  c                     e Zd ZU g Zded<   g Zded<   dZded<   dZded	<   ded
<   ded<   dZ	 	 dFdGdZ	dHdZ
 ed          dId"            ZdHd#ZdJd%ZdHd&ZdKd'ZdHd(ZdHd)ZdHd*ZedHd+            ZdHd,Z	 dLdMd7ZdNd@ZdOdCZdddDdPdHZddIdQdJZdRdKZdSdTdLZdKdMZej         dUdO            Z!dUdPZ"dVdRZ#dWdTZ$dXdUZ%dKdVZ&dYdWZ'dKdXZ(dHdYZ)dZd[Z*d[d^Z+e,d\dc            Z-d]deZ.d^d_diZ/d^d`dlZ0d^d_dmZ1dddDdadoZ2ddddpdbdqZ3dddDdcdsZ4	 	 	 	 dddedzZ5dddDdfd{Z6dddDdgd}Z7dddDdhdZ8dddDdidZ9edjd            Z:dkdZ;edkd            Z<e=j>        dfdldZ?	 dLdmdZ@dndZAdodZBdodZCdpdZDdqdZEd^drdZFeGjH        	 d^eIjJ        ddddsd            ZKeGjH        deIjJ        dddtd            ZLdudZMdLdvdZNdYdZOdwdZPdxdZQdKdZRdydZSdkdZTdKdZUdKdZVdzdZWd{dZXd|dZYdKdZZdndZ[dndZ\d}dZ]d}dZ^dndZ_d~dĄZ`ddƄZaddȄZbdKdɄZcdKdʄZddKd˄Zee,dHd̄            ZfdKd̈́ZgdKd΄ZhdkdτZidddҜddԄZjdddd՜ddׄZkdd؄ZlddلZmdKdڄZndKdۄZodKd܄ZpddބZqddZrdydZsddZtddZuedd            ZvdKdZwdKdZxddZyddZzddZ{ddZ|dKdZ}dKdZ~dKdZdKdZdKdZ	 d^ddZddZ	 dSdd ZdndZddZdHdZddZddZddZdHd	Zej         dd            ZddZddZdKdZddZddZdHdZdKdZddZdKdZej         dd            ZddZdd Zdd"Zdqd#ZdKd$ZeIj        fdd&ZeGjH        ddeIj        ddfdd'            ZddeIj        dd(dd*Zddddd+dd.Zdd2Zdd6ZdYd7Zdd9Zdd;ZdYd<Zdd=Zdd?Z	 d^ddCZddEZdS (  r   r   ignore_libsinternal_libsNzT.Union[None, str, T.List[str]]LINKER_PREFIXTr{   languageidr   	warn_argsCOMPILERFccacheexelistversionfor_machiner   info'MachineInfo'r  T.Optional['DynamicLinker']full_versionrK  is_crossr   c	                4   ||z   | _         || _        t          | j                 | _        t          | j                  | _        | j        d         | _        || _        || _	        || _
        t                      | _        || _        || _        || _        g | _        d S Nr   )rW  exelist_no_ccacher_   rR  file_suffixessetcan_compile_suffixesdefault_suffixrX  r]  rY  r
  r  rZ  r^  modes)	selfrV  rW  rX  rY  rZ  r  r]  r^  s	            rj   __init__zCompiler.__init__  s     '!(*4=9$'(:$;$;!"03(&.1ee	 ')


rl   r|   c                    d}|                     | j        j        | j        d                    | j                            S )Nz<{0}: v{1} `{2}`> )format	__class__r   rX  r%  rW  )rg  repr_strs     rj   __repr__zCompiler.__repr__  s9    &t~6"xx557 7 	7rl   r   srcr   c                   t          |t          j                  r|j        }t          j                            |          d         }|dk    r|                                }t          |          o|dd          | j	        v S )Nr   z.C)
r   r	   r   r   r#  r$  splitextr   r   rd  )rg  ro  rh   s      rj   can_compilezCompiler.can_compile  sn    c8=)) 	)C!!#&&q)T>>\\^^FF||Gqrr
d.G GGrl   c                    | j         S r   )rS  rg  s    rj   get_idzCompiler.get_id  s	    wrl   T.List[Compiler]c                    | j         S r   )rf  rt  s    rj   	get_modeszCompiler.get_modes  s
    zrl   c                    | j         d         S r`  rW  rt  s    rj   get_exezCompiler.get_exe  s    |Arl   c                     | j         dd          S )Nr   rz  rt  s    rj   get_exe_argszCompiler.get_exe_args  s    |ABBrl   c                J    	 | j         j        S # t          $ r
 | j        cY S w xY wr   )r  rS  r   rt  s    rj   get_linker_idzCompiler.get_linker_id  s7    	;>! 	 	 	7NNN	s    ""c                x    | j         | j        g}| j        r|d| j        z  gz  }dd                    |          z  S )Nz"%s"z(%s)rj  )rS  rX  r]  r%  )rg  detailss     rj   get_version_stringzCompiler.get_version_string  sG    7DL) 	6$"3455G'**++rl   c                    | j         S r   )rR  rt  s    rj   get_languagezCompiler.get_language
  s
    }rl   c                4    | j                                         S r   )rR  
capitalize)clss    rj   get_display_languagezCompiler.get_display_language  s    |&&(((rl   c                    | j         S r   )re  rt  s    rj   get_default_suffixzCompiler.get_default_suffix  s    ""rl   dnameprefixr   r   
extra_argsAT.Union[T.List[str], T.Callable[[CompileCheckMode], T.List[str]]]dependenciesT.List['Dependency']disable_cacheT.Tuple[str, bool]c                J    t          d|                                 z            )Nz%s does not support get_define r   ru  )rg  r  r  r   r  r  r  s          rj   
get_definezCompiler.get_define  s      ##Dt{{}}#TUUUrl   
expressionlowT.Optional[int]highguessGT.Union[None, T.List[str], T.Callable[[CompileCheckMode], T.List[str]]] T.Optional[T.List['Dependency']]r}   c               J    t          d|                                 z            )Nz %s does not support compute_int r  )	rg  r  r  r  r  r  r   r  r  s	            rj   compute_intzCompiler.compute_int  s      ##E#UVVVrl   parameter_listr2  c                J    t          d|                                 z            )Nz;%s does not support compute_parameters_with_absolute_paths r  )rg  r  r2  s      rj   &compute_parameters_with_absolute_pathsz/Compiler.compute_parameters_with_absolute_paths   s#    "#`cgcncncpcp#pqqqrl   r  r  r*  membernamesT.Tuple[bool, bool]c               J    t          d|                                 z            )Nz"%s does not support has_member(s) r  )rg  r*  r  r  r   r  r  s          rj   has_memberszCompiler.has_members$  s      ##G$++--#WXXXrl   )r  c               J    t          d|                                 z            )Nz%s does not support has_type r  rg  r*  r  r   r  r  s         rj   has_typezCompiler.has_type*  s      ##BT[[]]#RSSSrl   c                J    t          d|                                 z            )Nz3%s does not support symbols_have_underscore_prefix r  rg  r   s     rj   symbols_have_underscore_prefixz'Compiler.symbols_have_underscore_prefix/  s#    "#X[_[f[f[h[h#hiiirl   c                j    |r| j                                         n| j                                        S r   )rW  copyra  )rg  rV  s     rj   get_exelistzCompiler.get_exelist2  s/    &,Ot|  """$2H2M2M2O2OOrl   c                j    | j         r| j                                         n|                                 S r   )r  r  rt  s    rj   get_linker_exelistzCompiler.get_linker_exelist5  s.    ,0KOt{&&(((T=M=M=O=OOrl   
outputnamec                    d S r   rf   rg  r  s     rj   get_output_argszCompiler.get_output_args8      rl   c                6    | j                             |          S r   )r  r  r  s     rj   get_linker_output_argszCompiler.get_linker_output_args<  s    {**:666rl   dirnamec                6    | j                             |          S r   )r  get_search_args)rg  r  s     rj   get_linker_search_argszCompiler.get_linker_search_args?  s    {**7333rl   definec                0    t          d| j        z            )Nz'%s does not support get_builtin_define.r   rS  rg  r  s     rj   get_builtin_definezCompiler.get_builtin_defineB      "#Ltw#VWWWrl   c                0    t          d| j        z            )Nz'%s does not support has_builtin_define.r  r  s     rj   has_builtin_definezCompiler.has_builtin_defineE  r  rl   c                    g S r   rf   rt  s    rj   get_always_argszCompiler.get_always_argsH      	rl   c                4    | j                                         S )z[
        Determines whether the linker can accept arguments using the @rsp syntax.
        )r  get_accepts_rsprt  s    rj   can_linker_accept_rspzCompiler.can_linker_accept_rspK  s     {**,,,rl   c                4    | j                                         S r   )r  r  rt  s    rj   get_linker_always_argszCompiler.get_linker_always_argsQ  s    {**,,,rl   c                4    | j                                         S r   )r  get_lib_prefixrt  s    rj   get_linker_lib_prefixzCompiler.get_linker_lib_prefixT      {))+++rl   
implibnamec                    g S )z
        Used only on Windows for libraries that need an import library.
        This currently means C, C++, Fortran.
        rf   )rg  r  s     rj   gen_import_library_argsz Compiler.gen_import_library_argsW  s	    
 	rl   r   r   c                $    | j          d|j         S )N_)rR  r   )rg  r   s     rj   make_option_namezCompiler.make_option_name^  s    -,,#(,,,rl   r
   r   r  )T.Tuple[OptionKey, options.AnyOptionType]c                &     | j         |           | S r   )update)r
   r  s     rj   update_optionszCompiler.update_optionsa  s    trl   'MutableKeyedOptionDictType'c                    i S r   rf   rt  s    rj   get_optionszCompiler.get_optionsf  r  rl   r   r   r   c                    g S r   rf   rg  r   r   r   s       rj   get_option_compile_argsz Compiler.get_option_compile_argsi  r  rl   r   r   c                    g S r   rf   r  s       rj   get_option_std_argszCompiler.get_option_std_argsl  r  rl   c                :    | j                             |||          S r   )r  get_option_link_argsr  s       rj   r  zCompiler.get_option_link_argso  s    {//ZHHHrl   hnamec               J    t          d|                                 z            )zCheck that header is usable.

        Returns a two item tuple of bools. The first bool is whether the
        check succeeded, the second is whether the result was cached (True)
        or run fresh (False).
        +Language %s does not support header checks.r   r  )rg  r  r  r   r  r  s         rj   check_headerzCompiler.check_headerr  s%     ##PSWSlSlSnSn#nooorl   )r  r  r  c               J    t          d|                                 z            )a  Check that header is exists.

        This check will return true if the file exists, even if it contains:

        ```c
        # error "You thought you could use this, LOLZ!"
        ```

        Use check_header if your header only works in some cases.

        Returns a two item tuple of bools. The first bool is whether the
        check succeeded, the second is whether the result was cached (True)
        or run fresh (False).
        r  r  )rg  r  r  r   r  r  r  s          rj   
has_headerzCompiler.has_header}  s%    $ ##PSWSlSlSnSn#nooorl   symbolc               J    t          d|                                 z            )Nz2Language %s does not support header symbol checks.r  )rg  r  r  r  r   r  r  s          rj   has_header_symbolzCompiler.has_header_symbol  s%     ##WZ^ZsZsZuZu#uvvvrl   codeGT.Union[T.List[str], T.Callable[[CompileCheckMode], T.List[str]], None]run_envT.Optional[T.Dict[str, str]]run_cwdr>  c           	        |                     | j                  }|r#|                                st          d          |                     ||||t
          j        d          5 }|j        dk    r@t          j	        d|j
         d|j         d           t          d          cd d d            S |r#|j                                        |j        gz   }	n|j        g}		 t          j        |	||	          \  }
}}nM# t"          $ r@}t          j	        d
|	 d| d           t          d          cY d }~cd d d            S d }~ww xY w	 d d d            n# 1 swxY w Y   t          j	        d           t          j	        |           t          j	        d           t          j	        |           t          d|
j        ||          S )Nz8Can not run test applications in this cross environment.T)r   want_outputr   zCould not compile test file z: 
F)r   cwdzCould not run: z	 (error: z)
zProgram stdout:
zProgram stderr:
)need_exe_wrapperrY  has_exe_wrapperr<  _build_wrapperr   r   r@  r   debugrI  r>  exe_wrapperget_commandrL  r	   
Popen_safe	Exception)rg  r  r   r  r  r  r  r  pcmdlistper1   sees                 rj   runzCompiler.run  s[   
 //0@AA 	bC$7$7$9$9 	b%&`aaa  sJK[K`nr ss 	(wx|q  
Z!,ZZ!,ZZZ[[[ ''	( 	( 	( 	( 	( 	( 	( 	(   */55771=/I=/(%0g7SSS
B ( ( (
EWEEqEEEFFF '''''''	( 	( 	( 	( 	( 	( 	( 	(( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	
&'''
2
&'''
2r}b"555sH   %?E1-EC;:E;
E)E .E/E EEEEc                  |j         j        }|                     |||t          d                    }|t	          |          f}||v r||         }d|_        t          j        d           t          j        d|           t          j        d|           t          j        d|j                   t          j        d|j	                   t          j        d|j
                   n|                     ||||	          }|||<   |S )
Nr   TzUsing cached run result:Code:
zArgs:
zCached run returncode:
zCached run stdout:
zCached run stderr:
r  )r   run_check_cachebuild_wrapper_argsr   tuplerD  r   r  r@  rB  rC  r  )	rg  r  r   r  r  r  r  r   r   s	            rj   
cached_runzCompiler.cached_run  s     ,6&&sJFVW]F^F^__U4[[!/!!$AAHJ1222Jy$'''Jy*---J11<@@@J-qx888J-qx8888szUUA#$OC rl   T.Tuple[int, bool]c               J    t          d|                                 z            )Nz+Language %s does not support sizeof checks.r  r  s         rj   sizeofzCompiler.sizeof  s%     ##PSWSlSlSnSn#nooorl   T.Optional[T.List[str]]c               J    t          d|                                 z            )Nz.Language %s does not support alignment checks.r  r  s         rj   	alignmentzCompiler.alignment  s%     ##SVZVoVoVqVq#qrrrrl   funcnamec               J    t          d|                                 z            )zSee if a function exists.

        Returns a two item tuple of bools. The first bool is whether the
        check succeeded, the second is whether the result was cached (True)
        or run fresh (False).
        z-Language %s does not support function checks.r  )rg  r  r  r   r  r  s         rj   has_functionzCompiler.has_function  s%     ##RUYUnUnUpUp#pqqqrl   r   c                *    |                                 S z7Always returns a copy that can be independently mutatedr  )r  r  rZ  s      rj   _unix_args_to_nativezCompiler._unix_args_to_native       yy{{rl   c                8    |                      || j                  S r   )r  rZ  rg  r  s     rj   unix_args_to_nativezCompiler.unix_args_to_native  s    ((ty999rl   c                *    |                                 S r  r  )r  r  s     rj   native_args_to_unixzCompiler.native_args_to_unix  r  rl   libname
extra_dirslibtyper   lib_prefix_warningc                L    t          d|                                  d          )N	Language z" does not support library finding.r  )rg  r  r   r   r!  r"  s         rj   find_libraryzCompiler.find_library  s(    "#nt/H/H/J/J#n#n#nooorl   strictT.Optional[T.Tuple[str, ...]]c                j    t          d                    |                                                     )Nz0Language {} does not support get_library_naming.r   rk  r  )rg  r   r!  r&  s       rj   get_library_namingzCompiler.get_library_naming  s6    ">EE))++- -. . 	.rl   c                    g S r   rf   r  s     rj   get_program_dirszCompiler.get_program_dirs  r  rl   c                j    t          d                    |                                                     )zChecks if the compiler has all of the arguments.

        :returns:
            A tuple of (bool, bool). The first value is whether the check
            succeeded, and the second is whether it was retrieved from a cache
        z1Language {} does not support has_multi_arguments.r)  rg  r  r   s      rj   r  zCompiler.has_multi_arguments  s8     #?FF))++- -. . 	.rl   c                8    | j                             ||          S )zChecks if the linker has all of the arguments.

        :returns:
            A tuple of (bool, bool). The first value is whether the check
            succeeded, and the second is whether it was retrieved from a cache
        )r  r  r.  s      rj   r(  z!Compiler.has_multi_link_arguments  s     {..tS999rl   r   r   c                    |t           j        k    s
J d            |t           j        k    rd}nd}t          j                            |d|z             S )NAIn pre-processor mode, the output is sent to stdout and discardedexer,   zoutput.)r   r   r   r#  r$  r%  )rg  r  r   rh   s       rj   _get_compile_outputzCompiler._get_compile_output  sX    '22224w222 #(((FFFw||GY%7888rl   c                    g }||                                  z  }|t          j        u r||                                 z  }n6|t          j        u r||                                 z  }n|t          j        u sJ |S r   )r  r   r   get_compile_only_argsr   get_preprocess_only_argsr   )rg  r   r  s      rj   get_compiler_args_for_modez#Compiler.get_compiler_args_for_mode  s    $$&&&#+++D..000DD%000D11333DD+00000rl   T.Optional[T.Iterable[str]]r   c                "    t          | |          S )z;Return an appropriate CompilerArgs instance for this class.r   r  s     rj   compiler_argszCompiler.compiler_args%  s    D$'''rl   )r   r  temp_dir(T.Union[None, CompilerArgs, T.List[str]]r  r;  T.Iterator[CompileResult]c             #    K   |t           j        k    r|r
J d            |g }t          |          5 }d}t          |t                    rt
          j                            |d| j        z             }t          |dd          5 }	|	
                    |           |                    d          s|	
                    d           d d d            n# 1 swxY w Y   d	}d
| }
n|j        }d| }
|                                 }|                    |           |t           j        k    r.|                     ||          }||                     |          z  }|                    |                     t          |                               |r||z  }|                     |           |                                z   }t+          j        d           t+          j        d|           t+          j        |
           t
          j                                        }d|d<   |rd|d<   t3          |d||          \  }}}t5          ||||j        |          }|r||_        |V  d d d            d S # 1 swxY w Y   d S )Nr1  )dirFz	testfile.wzutf-8)encodingr  Tr  zSource file: )rV  zRunning compile:zWorking directory: r?   LC_ALLr   CCACHE_DISABLEzCommand line)msgr  r   )rI  )r   r   r   r   r{   r#  r$  r%  re  openwriteendswithr   r:  r  r3  r  r   r7  r  	to_nativer   r  environr  r   rG  r@  rL  )rg  r  r  r   r  r;  
tmpdirname	no_ccachesrcnameofile
code_debugcommandsoutputcommand_listos_envr   stdostderesults                      rj   r   zCompiler.compile)  s+      #..."gg$ggggJ'H555 -	I$$$ 7',,z'2T5H'HJ J'3999 *UKK%%%==.. *D)))* * * * * * * * * * * * * * *
 !	-t--

*6W66
 ))++HOOG$$$ '22211*dCCD00888OOD;;<LT<R<RSSTTT
  'J&++y=+AAHDVDVDXDXXLJ)***J,j999Jz"""Z__&&F"F8 /+.'(-lT^djkkkMAtT"4|Q\V]^^^F ,%+"LLL[-	 -	 -	 -	 -	 -	 -	 -	 -	 -	 -	 -	 -	 -	 -	 -	 -	 -	s8   AI0A CI0C	I0C	F
I00I47I4r  r   r;  cdatacoredata.CoreData(T.Union[None, T.List[str], CompilerArgs]c             #  b  K   |t          |          nt                      }t          | j                  | j        |||f}||j        v r|j        |         }d|_        t          j        d           t          j        dd                    |j                  d           t          j        d|           t          j        d|j	                   t          j        d|j
                   |V  d S |                     |||d	|
          5 }||j        |<   |V  d d d            d S # 1 swxY w Y   d S )NTzUsing cached compile:zCached command line: rj  r  r  zCached compiler stdout:
zCached compiler stderr:
Fr  r   r  r;  )r
  rW  rX  compiler_check_cacherD  r   r  r%  rH  rB  rC  r   )	rg  r  rW  r  r   r;  textra_argsr   r   s	            rj   cached_compilezCompiler.cached_compilee  s}      ?I>Tz):):):Z_ZaZa/4T\/B/BDLRVXcei.j %,,,*3/AAHJ.///J.0C0CTJJJJy$'''J2AH===J2AH===GGGGGdzRWbjkk op23*3/                 s   D$$D(+D(	colortypec                    g S r   rf   )rg  r_  s     rj   r  zCompiler.get_colorout_args      	rl   rel_objpchc                    g S r   rf   )rg  rb  rc  s      rj   get_compile_debugfile_argsz#Compiler.get_compile_debugfile_args  r  rl   c                    dS )NFrf   rt  s    rj   should_link_pch_objectzCompiler.should_link_pch_object  s    url   
targetfilec                6    | j                             |          S r   )r  get_debugfile_namerg  rh  s     rj   get_link_debugfile_namez Compiler.get_link_debugfile_name      {--j999rl   c                6    | j                             |          S r   )r  get_debugfile_argsrk  s     rj   get_link_debugfile_argsz Compiler.get_link_debugfile_args  rm  rl   c                4    | j                                         S r   )r  get_std_shared_lib_argsrt  s    rj   get_std_shared_lib_link_argsz%Compiler.get_std_shared_lib_link_args  s    {22444rl   c                6    | j                             |          S r   )r  get_std_shared_module_argsrg  r   s     rj   get_std_shared_module_link_argsz(Compiler.get_std_shared_module_link_args  s    {55f===rl   c                6    | j                             |          S r   )r  get_link_whole_forr  s     rj   ry  zCompiler.get_link_whole_for  s    {--d333rl   c                4    | j                                         S r   )r  get_allow_undefined_argsrt  s    rj   r0  z&Compiler.get_allow_undefined_link_args  s    {33555rl   c                4    | j                                         S r   )r  no_undefined_argsrt  s    rj   r/  zCompiler.no_undefined_link_args      {,,...rl   instruction_setc                    dS )zCompiler arguments needed to enable the given instruction set.

        Return type ay be an empty list meaning nothing needed or None
        meaning the given set is not supported.
        Nrf   )rg  r  s     rj   get_instruction_set_argsz!Compiler.get_instruction_set_args  s	     trl   from_dirrpath_pathsT.Tuple[str, ...]build_rpathinstall_rpath"T.Tuple[T.List[str], T.Set[bytes]]c                @    | j                             ||||||          S r   )r  build_rpath_args)rg  r   r2  r  r  r  r  s          rj   r  zCompiler.build_rpath_args  s.     {++Hk;O O 	Orl   filenamec                6    | j                             |          S r   )r  get_archive_name)rg  r  s     rj   r  zCompiler.get_archive_name  s    {++H555rl   c                F    | j         sg S | j                                         S r   )r  get_command_to_archive_shlibrt  s    rj   r  z%Compiler.get_command_to_archive_shlib  s%    { 	I{77999rl   c                    g S r   rf   r  s     rj   thread_flagszCompiler.thread_flags  r  rl   c                6    | j                             |          S r   )r  r  r  s     rj   thread_link_flagszCompiler.thread_link_flags  s    {'',,,rl   c                J    t          d|                                 z            )Nz*Language %s does not support OpenMP flags.r  r  s     rj   openmp_flagszCompiler.openmp_flags  s#    "#ORVRkRkRmRm#mnnnrl   c                ,    |                      |          S r   )r  r  s     rj   openmp_link_flagszCompiler.openmp_link_flags  s      %%%rl   c                    g S r   rf   r  s     rj   language_stdlib_only_link_flagsz(Compiler.language_stdlib_only_link_flags  r  rl   vistypec                    g S r   rf   )rg  r  s     rj   gnu_symbol_visibility_argsz#Compiler.gnu_symbol_visibility_args  r  rl   valuec                6    | j                             |          S r   )r  get_win_subsystem_argsrg  r  s     rj   r  zCompiler.get_win_subsystem_args  s     {11%888rl   r   c                L    t          d|                                  d          )Nr$  z& does not support function attributes.r  )rg  r   r   s      rj   has_func_attributezCompiler.has_func_attribute  s1    "[1133[[[] ] 	]rl   c                n    d}t          |                    |                                                     )Nz6Language {} does not support position-independent coder)  rg  rN   s     rj   get_pic_argszCompiler.get_pic_args  s-    D"188D,E,E,G,G#H#HIIIrl   c                n    d}t          |                    |                                                     )Nz<Language {} does not support position-independent executabler)  r  s     rj   get_pie_argszCompiler.get_pie_args  s-    J"188D,E,E,G,G#H#HIIIrl   c                4    | j                                         S r   )r  r  rt  s    rj   get_pie_link_argszCompiler.get_pie_link_args      {'')))rl   c                     dS )as  Returns the argument family type.

        Compilers fall into families if they try to emulate the command line
        interface of another compiler. For example, clang is in the GCC family
        since it accepts most of the same arguments as GCC. ICL (ICC on
        windows) is in the MSVC family since it accepts most of the same
        arguments as MSVC.
        otherrf   rf   rl   rj   get_argument_syntaxzCompiler.get_argument_syntax  s	     wrl   c                J    t          d|                                 z            )Nz.%s does not support get_profile_generate_args r  rt  s    rj   r  z"Compiler.get_profile_generate_args  s'    "<t{{}}LN N 	Nrl   c                J    t          d|                                 z            )Nz)%s does not support get_profile_use_args r  rt  s    rj   r  zCompiler.get_profile_use_args  s'    "7$++--GI I 	Irl   c                    d}d}d}g }t          |          }|D ]J}||v r|                    |          r||vr!||v rt          |           5|                    |           K|S )N)z-headerpad_max_install_names)z-Wl,-L)r  z
-framework)iter
startswithnextr  )rg  r  rm_exactrm_prefixesrm_nextr   iargsargs           rj   remove_linkerlike_argszCompiler.remove_linkerlike_args  s    4%'T

 	 	Ch ~~k** s+/E/Eg~~UJJsOOOO
rl   r   r   r   r   c                   g S r   rf   )rg  r   r   s      rj   r   zCompiler.get_lto_compile_args  r  rl   r  r  c               4    | j                                         S r   )r  get_lto_args)rg  r   r   r  s       rj   r&  zCompiler.get_lto_link_args	  s    {'')))rl   c                    g S r   rf   r  s     rj   r  zCompiler.sanitizer_compile_args  r  rl   c                6    | j                             |          S r   )r  r6  r  s     rj   r'  zCompiler.sanitizer_link_args  s    {))%000rl   c                4    | j                                         S r   )r  r,  rt  s    rj   r,  zCompiler.get_asneeded_args  r~  rl   c                4    | j                                         S r   )r  r.  rt  s    rj   r.  zCompiler.headerpad_args  r  rl   c                4    | j                                         S r   )r  r+  rt  s    rj   r+  zCompiler.bitcode_args  r  rl   optimization_levelc                6    | j                             |          S r   )r  get_optimization_link_argsrg  r  s     rj   r  z#Compiler.get_optimization_link_args  s    {556HIIIrl   
shlib_namerh   	soversiondarwin_versionsT.Tuple[str, str]c                @    | j                             ||||||          S r   )r  get_soname_args)rg  r   r  r  rh   r  r  s          rj   r  zCompiler.get_soname_args  s,     {**VY  	rl   c                    |j         S r   )	link_argsrv  s     rj   get_target_link_argszCompiler.get_target_link_args&  s    rl   dep'Dependency'c                *    |                                 S r   )get_compile_argsrg  r  s     rj   get_dependency_compile_argsz$Compiler.get_dependency_compile_args)  s    ##%%%rl   c                P    |                     |                                           S r   )get_link_argsr  r  s     rj   get_dependency_link_argsz!Compiler.get_dependency_link_args,  s"      !2!2!4!4555rl   c                    g S )zKGet a list of arguments to pass to the compiler to set the linker.
        rf   )r  r  rX  s      rj   use_linker_argszCompiler.use_linker_args/  s	     	rl   c                    g S r   rf   rt  s    rj   r  zCompiler.get_coverage_args5  r  rl   c                4    | j                                         S r   )r  r  rt  s    rj   r)  zCompiler.get_coverage_link_args8  r~  rl   disablec                    g S )zGet arguments to enable or disable assertion.

        :param disable: Whether to disable assertions
        :return: A list of string arguments for this compiler
        rf   )rg  r  r   s      rj   r	  zCompiler.get_assert_args;  s	     	rl   r  r   c                    |t           j        v r|S |dv sJ d}d}|dk    rd}d}|dk    rdS |d	k    r|S |d
v r|S |dk    sJ t          d          )N>   from_buildtypestatic_from_buildtypemddmdr  mtdmtr   r   r  >   minsizer   debugoptimizedcustomzBRequested C runtime based on buildtype, but buildtype is "custom".)r
   
MSCRT_VALSr   )rg  r  r   dbgrels        rj   get_crt_valzCompiler.get_crt_valC  s    g(((NEEEEE---CC 6'!!JBBBJ((((&'klllrl   c                     t          d          Nz4This compiler does not support Windows CRT selectionr   rg  r  r   s      rj   r  zCompiler.get_crt_compile_argsY      "#YZZZrl   c                     t          d          r  r  r  s      rj   r1  zCompiler.get_crt_link_args\  r  rl   c                    g S r   rf   rt  s    rj   r5  zCompiler.get_compile_only_args_  r  rl   c                     t          d          )Nz*This compiler does not have a preprocessorr  rt  s    rj   r6  z!Compiler.get_preprocess_only_argsb  s    "#OPPPrl   c                *    |                                  S r   )r6  rt  s    rj   get_preprocess_to_file_argsz$Compiler.get_preprocess_to_file_argse  s    ,,...rl   c                    g S r   rf   rt  s    rj   get_default_include_dirsz!Compiler.get_default_include_dirsh  ra  rl   c                n    |                                  dk    s| j                                        sdgS g S )z=Enable transparent large-file-support for 32-bit UNIX systemsmsvcz-D_FILE_OFFSET_BITS=64)r  rZ  	is_darwinrt  s    rj   get_largefile_argszCompiler.get_largefile_argsl  s>    ((**f44	8K8K8M8M4 --- 	rl   	elf_classc                    g S r   rf   )rg  r   r  s      rj   get_library_dirszCompiler.get_library_dirs  ra  rl   r   rtypeT.Union[str, int]c                0    t          | j         d          )Nz" does not support get_return_valuer  )rg  r   r  r  r   r  r  s          rj   get_return_valuezCompiler.get_return_value  s     #dg#Q#Q#QRRRrl   allow_systemc                0    t          | j         d          )Nz  does not support find_frameworkr  )rg  r   r   r   r  s        rj   find_frameworkzCompiler.find_framework  s    
 #dg#O#O#OPPPrl   c                0    t          | j         d          )Nz& does not support find_framework_pathsr  r  s     rj   find_framework_pathszCompiler.find_framework_paths      "dg#U#U#UVVVrl   c                0    t          | j         d          )Nz" does not support attribute checksr  rg  r   s     rj   attribute_check_funczCompiler.attribute_check_func  s    "dg#Q#Q#QRRRrl   c                0    t          | j         d          Nz& does not support pre compiled headersr  rt  s    rj   get_pch_suffixzCompiler.get_pch_suffix  r  rl   c                0    t          | j         d          r  r  r
  s     rj   get_pch_namezCompiler.get_pch_name  r  rl   pch_dirheaderc                0    t          | j         d          r  r  )rg  r  r  s      rj   get_pch_use_argszCompiler.get_pch_use_args  r  rl   c                0    t          | j         d          )Nz% does not support function attributesr  r
  s     rj   !get_has_func_attribute_extra_argsz*Compiler.get_has_func_attribute_extra_args  s    "dg#T#T#TUUUrl   c                6    d                     | j                  S )Nrj  )r%  rW  rt  s    rj   r  zCompiler.name_string  s    xx%%%rl   work_direnvironmentNonec                    dS )zCheck that this compiler actually works.

        This should provide a simple compile/link test. Something as simple as:
        ```python
        main(): return 0
        ```
        is good enough here.
        Nrf   )rg  r  r  s      rj   sanity_checkzCompiler.sanity_check  s      rl   T.Tuple[T.Optional[str], str]c                
    d |fS r   rf   )rg  r   s     rj   split_shlib_to_partszCompiler.split_shlib_to_parts  s    U{rl   	outtargetoutfilec                    g S r   rf   )rg  r   r!  s      rj   get_dependency_gen_argsz Compiler.get_dependency_gen_args  r  rl   c                    g S r   rf   rt  s    rj   get_std_exe_link_argszCompiler.get_std_exe_link_args  ra  rl   r$  	is_systemc                    g S r   rf   )rg  r$  r&  s      rj   get_include_argszCompiler.get_include_args  r  rl   objfilec                6    |dz   |                                  z   S )Nr   )get_depfile_suffix)rg  r)  s     rj   depfile_for_objectzCompiler.depfile_for_object  s    }t668888rl   c                0    t          | j         d          )Nz& does not implement get_depfile_suffixr  rt  s    rj   r+  zCompiler.get_depfile_suffix  r  rl   c                    g S )z>Arguments to turn off default inclusion of standard libraries.rf   rt  s    rj   get_no_stdinc_argszCompiler.get_no_stdinc_args  ra  rl   levelc                    g S r   rf   )rg  r0  s     rj   get_warn_argszCompiler.get_warn_args  r  rl   c                    g S r   rf   rt  s    rj   r"  zCompiler.get_werror_args  r  rl   c                    d S r   rf   r  s     rj   get_optimization_argszCompiler.get_optimization_args  r  rl   c                0    t          | j         d          )Nz* does not implement get_module_incdir_argsr  rt  s    rj   get_module_incdir_argszCompiler.get_module_incdir_args      "dg#Y#Y#YZZZrl   c                0    t          | j         d          )Nz* does not implement get_module_outdir_argsr  )rg  r$  s     rj   get_module_outdir_argszCompiler.get_module_outdir_args  r8  rl   module_namec                0    t          | j         d          )Nz+ does not implement module_name_to_filenamer  )rg  r;  s     rj   module_name_to_filenamez Compiler.module_name_to_filename  s    "dg#Z#Z#Z[[[rl   c                *    |                                  S )aL  Arguments to pass the compiler and/or linker for checks.

        The default implementation turns off optimizations.

        Examples of things that go here:
          - extra arguments for error checking
          - Arguments required to make the compiler exit with a non-zero status
            when something is wrong.
        )get_no_optimization_args)rg  r   s     rj   get_compiler_check_argsz Compiler.get_compiler_check_args  s     ,,...rl   c                    g S )z8Arguments to the compiler to turn off all optimizations.rf   rt  s    rj   r?  z!Compiler.get_no_optimization_args  ra  rl   UT.Union[None, CompilerArgs, T.List[str], T.Callable[[CompileCheckMode], T.List[str]]]c                    t          |          r ||          }|g }|g }|                     |                     |                    }|D ]>}||                                z  }|t          j        u r||                                z  }?|t          j        u r)||j        	                    | j
        | j                  z  }n6|t          j        u r(||j                            | j
        | j                  z  }||z  }|S )ab  Arguments to pass the build_wrapper helper.

        This generally needs to be set on a per-language basis. It provides
        a hook for languages to handle dependencies and extra args. The base
        implementation handles the most common cases, namely adding the
        check_arguments, unwrapping dependencies, and appending extra args.
        )callabler:  r@  r  r   r   r  r   r   get_external_argsrY  rR  get_external_link_args)rg  r   r  r  r   r  rL   s          rj   r	  zCompiler.build_wrapper_args  s    J 	*#D))JJL !!$">">t"D"DEE 	* 	*AA&&(((D',,,)))#+++CL2243CT]SSSDD%***CL778H$-XXXD
rl   c              #  @  K   |                      ||||          }|s|r>|                     |||||j                  5 }	|	V  ddd           dS # 1 swxY w Y   dS |                     ||j        |||j                  5 }	|	V  ddd           dS # 1 swxY w Y   dS )zHelper for getting a cached value when possible.

        This method isn't meant to be called externally, it's mean to be
        wrapped by other methods like compiles() and links().
        r[  NrV  )r	  r   scratch_dirr^  r   )
rg  r  r   r  r  r   r  r  r  rs
             rj   r  zCompiler._build_wrapper  sM      &&sJdKK 	K 	dt$Kbebqrr vw                  $$T3<Dt^a^m$nn rs                 s#   AAABBBr  r  r   r  UT.Union[None, T.List[str], CompilerArgs, T.Callable[[CompileCheckMode], T.List[str]]]c                   |                      ||||||          5 }|j        dk    |j        fcddd           S # 1 swxY w Y   dS )zRun a compilation or link test to see if code can be compiled/linked.

        :returns:
            A tuple of (bool, bool). The first value is whether the check
            succeeded, and the second is whether it was retrieved from a cache
        )r  r   N)r  r@  rD  )rg  r  r   r  r  r   r  r   s           rj   compileszCompiler.compiles%  s       sJdZg hh 	/lm<1$ah.	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s   ;??)r   r  r  r  r   T.Optional['Compiler']c          	     D   |rz|                     |||d          5 }t          j                            |j                  }|                     ||||t          j        d          cd d d            S # 1 swxY w Y   |                     ||||t          j        |          S )NT)r  r  rJ  )r  r	   r   from_absolute_filerL  rM  r   r   )	rg  r  r   r   r  r  r  rI  r)  s	            rj   linkszCompiler.links3  s   
  	p((s[_(`` pde"-::1=II}}Wcj2>EUEZjn % p pp p p p p p p p p p p p p p p p
 }}T3:*6=M=Rbo  q q 	qs   A	A22A69A6kwargsr   build_to_srcc                0    t          | j         d          )z&Used by D for extra language features.z$ does not implement get_feature_argsr  )rg  rR  rS  s      rj   get_feature_argszCompiler.get_feature_argsA  s     #dg#S#S#STTTrl   prelink_nameobj_list!T.Tuple[T.List[str], T.List[str]]c                0    t          | j         d          )Nz$ does not know how to do prelinking.r  )rg  rV  rW  s      rj   get_prelink_argszCompiler.get_prelink_argsF  s    "dg#S#S#STTTrl   c                    dS )zCControls whether compile args have to be used for prelinking or notFrf   rt  s    rj   get_prelink_append_compile_argsz(Compiler.get_prelink_append_compile_argsI  s    url   'RSPFileSyntax'c                4    | j                                         S )zThe format of the RSP file that this compiler supports.

        If `self.can_linker_accept_rsp()` returns True, then this needs to
        be implemented
        )r  rsp_file_syntaxrt  s    rj   r_  zCompiler.rsp_file_syntaxM  s     {**,,,rl   is_debugc                    g S )z%Arguments required for a debug build.rf   )rg  r`  s     rj   get_debug_argszCompiler.get_debug_argsU  ra  rl   c                0    t          d| j                   )NzThere is no static linker for )NotImplementedErrorrR  rt  s    rj   needs_static_linkerzCompiler.needs_static_linkerY  s    !"R4="R"RSSSrl   c                J    t          |                                  d          )z%Get compiler's preprocessor.
        z does not support preprocessorr  rt  s    rj   get_preprocessorzCompiler.get_preprocessor\  s#     #dkkmm#S#S#STTTrl   basenamec                B    t          | j         d| | j                  S )Nr  machine)r   rR  rY  )rg  rh  s     rj   form_compileropt_keyzCompiler.form_compileropt_keya  s(    DM66H66@PQQQQrl   r   T.Optional[BuildTarget]options.ElementaryOptionValuesc                    t          |t                    r|                     |          }|r|j                            ||          S |j        j                            |                    |                    S )N)r   )r   r{   rl  r   r   r   r   r   )rg  r   r   r   r   s        rj   get_compileropt_valuezCompiler.get_compileropt_valued  sq     c3 	1++C00C 	Z<55fcBBB<(66szzZz7X7XYYYrl   optsc                    |                      d          }||         }t          |t          j        t          j        f          s
J d            d|vrdg|z   }||_        d S )Nstdfor mypyr   )rl  r   r
   UserStdOptionUserComboOptionchoices)rg  rq  r  r   rs  s        rj   _update_language_stdszCompiler._update_language_stdsq  sj    ''..3i# 5w7NOPP\\R\\\\Hu$Erl   )NNF)rV  r   rW  r   rX  r{   rY  r   rZ  r[  r  r\  r]  rK  r^  r   )r|   r{   )ro  r   r|   r   )r|   rv  )r|   r   )F)r  r{   r  r{   r   r   r  r  r  r  r  r   r|   r  )r  r{   r  r  r  r  r  r  r  r{   r   r   r  r  r  r  r|   r}   )r  r   r2  r{   r|   r   )r*  r{   r  r   r  r{   r   r   r  r  r  r  r|   r  )r*  r{   r  r{   r   r   r  r  r  r  r|   r  )r   r   r|   r   )T)rV  r   r|   r   )r  r{   r|   r   )r  r{   r|   r   )r  r{   r|   rK  )r  r{   r|   r   )r|   r   )r  r{   r|   r   )r   r   r|   r{   )r
   r   r  r  r|   r   )r|   r  r   )r   r   r   r   r   rK  r|   r   )r   r   r   r   r   rK  r|   r   )r  r{   r  r{   r   r   r  r  r  r  r|   r  )r  r{   r  r{   r   r   r  r  r  r  r  r   r|   r  )r  r{   r  r{   r  r{   r   r   r  r  r  r  r|   r  )NNNN)r  r   r   r   r  r  r  r  r  r  r  rK  r|   r>  )
r  r{   r   r   r  r  r  r  r|   r>  )r*  r{   r  r{   r   r   r  r  r  r  r|   r  )r*  r{   r  r{   r   r   r  r  r  r  r|   r  )r  r{   r  r{   r   r   r  r  r  r  r|   r  )r  r   rZ  r   r|   r   )r  r   r|   r   )r  r{   r   r   r   r   r!  r   r"  r   r|   r  )r   r   r!  r   r&  r   r|   r'  )r   r   r|   r   )r  r   r   r   r|   r  )r  r{   r   r   r|   r{   )r   r   r|   r   )r  r8  r|   r   )r  r   r  r<  r   r   r  r   r;  rK  r|   r=  )r  r   rW  rX  r  rY  r   r   r;  rK  r|   r=  )r_  r{   r|   r   )rb  r{   rc  r   r|   r   )rh  r{   r|   rK  )rh  r{   r|   r   )r   r   r|   r   )r  r{   r|   r  )r   r   r2  r{   r  r{   r  r  r  r{   r  r{   r|   r  )r  r{   r|   r{   )r   r   r|   r   )r  r{   r|   r   )r  r{   r|   r   )r   r{   r   r   r|   r  )r   r}   r   r{   r|   r   )r   r}   r   r{   r  rK  r|   r   )r  r   r|   r   )r  r{   r|   r   )r   r   r  r{   r  r{   rh   r{   r  r{   r  r  r|   r   )r  r  r|   r   )r  r{   rX  r{   r|   r   )r  r   r   r   r|   r   )r  r{   r   r{   r|   r{   )r  r{   r   r{   r|   r   )r   r   r  r  r|   r   )r   r{   r  r{   r  r{   r   r   r  r  r  r  r|   r   )
r   r{   r   r   r   r   r  r   r|   r  )r   r{   r|   r{   )r  r{   r  r{   r|   r   )r   r{   r|   r   )r  r{   r  r   r|   r  )r   r{   r|   r  )r   r{   r!  r{   r|   r   )r$  r{   r&  r   r|   r   )r)  r{   r|   rK  )r0  r{   r|   r   )r|   r  )r$  r{   r|   r   )r;  r{   r|   r{   )
r   r   r  rB  r  r  r   r   r|   r   )r  r   r   r   r  rB  r  r  r   r   r  r   r  r   r|   r=  )r  r   r   r   r  rK  r  r  r   r   r  r   r|   r  )r  r   r   r   r   rN  r  rK  r  r  r  r   r|   r  )rR  r   rS  r{   r|   r   )rV  r{   rW  r   r|   rX  )r|   r]  )r`  r   r|   r   )r|   r   )rh  r{   r|   r   )
r   r   r   r   r   rm  r   rK  r|   rn  )rq  r   r  r   r|   r  )r   r   r   rO  rE  rP  rQ  INVOKES_LINKERr   rh  rn  r   rr  ru  rx  r{  r}  r  r  r  classmethodr  r  r  r  r  r  r  r  r  r  abcabstractmethodr  r  r  r  r  r  r  r  r  r  r  staticmethodr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   PREFER_SHAREDr%  r*  r,  r  r(  r3  r7  r:  
contextlibcontextmanagerr   r   r   r^  r  re  rg  rl  rp  rs  rw  ry  r0  r/  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r&  r  r'  r,  r.  r+  r  r  r  r  r  r  r  r)  r	  r  r  r1  r5  r6  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r#  r%  r(  r,  r+  r/  r2  r"  r5  r7  r:  r=  r@  r?  r   r	  r  rM  rQ  rU  rZ  r\  r_  rb  re  rg  rl  rp  rx  rf   rl   rj   r   r     s          "K!!!! "$M####59M9999NMMMGGG''''D 8<HM* * * * *$7 7 7 7
 YtH H H H                   , , , ,    ) ) ) [)# # # # */V V V V VW W W Wr r r r koEIY Y Y Y Y Y CGT T T T T T
j j j jP P P P PP P P P 	   7 7 7 74 4 4 4X X X XX X X X   - - - -- - - -, , , ,   - - - -    \           I I I I I lpFJ	p 	p 	p 	p 	p 	p jnDH).p p p p p p, quKOw w w w w w cg=A48'+	6 6 6 6 6F jnDH     * fj@Dp p p p p p 9=CGs s s s s s <@FJ	r 	r 	r 	r 	r 	r    [: : : :    [
 )0(=Z^p p p p p
 +0. . . . .   	. 	. 	. 	.: : : :9 9 9 9	 	 	 	( ( ( ( ( GK9,<,AW\,09 9 9 9 9 9v NR0@0E37     2          : : : :: : : :5 5 5 5> > > >4 4 4 46 6 6 6/ / / /   O O O O6 6 6 6: : : :
   - - - -o o o o& & & &      9 9 9 9] ] ] ]J J J JJ J J J* * * * 	 	 	 \	N N N NI I I I   * 67I       34?C* * * * * *   1 1 1 1/ / / /, , , ,* * * *J J J J          & & & &6 6 6 6    [
   / / / /   m m m m,[ [ [ [[ [ [ [   Q Q Q Q/ / / /      ( 7;    S S S S -1	Q Q Q Q QW W W WS S S SW W W WW W W WW W W WV V V V& & & & 	               9 9 9 9W W W W          	   [ [ [ [[ [ [ [\ \ \ \
/ 
/ 
/ 
/    5E4L# # # # #J {HL0@0H^c-2	    & vzBF*:*B',	/ / / / / / 26rv?C$)	q q q q q qU U U U
U U U U   - - - -   T T T TU U U U
R R R R =A	Z Z Z Z Z     rl   )	metaclasscompT.Type[Compiler]rY  r   &dict[OptionKey, options.AnyOptionType]c                   d|  }t          |  d|          }t          |  d|          }d}|j        j                            |          }|d}|j                            |g           }d}	|j        j                            |          }
|
d}	|j                            |g           }
t          |t          t          f          s
J d            t          |
t          t          f          s
J d            t          j
        |j        |d	z   |dd
          }t          j
        |j        |dz   |
dd
          }|j        r|r|	r|                    |           ||||i}|S )zBRetrieve options that apply to all compilers for a given language.zExtra arguments passed to the _argsrj  
_link_argsFNTrt  z	 compiler)
split_args
allow_dupsz linker)r   r   r   get_pending_valueenv_optsgetr   r{   r  r
   UserStringArrayOptionr   ry  extend_value)ri   r  rY  r   descriptionargkeylargkeycomp_args_from_envvarcomp_optionslink_args_from_envvarlink_optionscargslargsrq  s                 rj   get_global_optionsr  z  s   
 :499K$~~~{;;;F4+++[AAAG!<(::6BBL $|''33!<(::7CCL $|''44lS$K00<<*<<<lS$K00<<*<<<)k!$8 8 8E
 )i$8 8 8E
  )4 )9N ) 	<(((4:E7E3RDKrl   )ri   r{   r|   r}   )r   r   r|   r   )rh   r{   r|   r   )r   r{   r|   r   )r   r   r|   r   )
r   r   r   r   r   r   r   r   r|   r   )
r   r   r   r   r   r   r   r   r|   r   )r   r   r   r   r|   r   )r   r{   r   r   r|   r   )r   r   r   r   r   r   r|   r   )r   r   r  r   r   r   r|   r   )
ri   r{   r  r  rY  r   r   r   r|   r  )j
__future__r   r{  r  os.pathr#  reenum	itertoolstypingTdataclassesr   r   	functoolsr   r  r   r	   r
   r   r   r   r   r   r   r   arglistr   TYPE_CHECKINGr   r-  r   r   r   	envconfigr   r  r   linkersr   linkers.linkersr   r   r  r   TypeVarr   r!   r   r   r   r_   rE  keysall_languagesc_cpp_suffixesrc  cpp_suffixes
c_suffixesr   r   chainvaluesr   r   
clib_langsr   dictitemsSUFFIX_TO_LANGLANGUAGES_USING_LDFLAGSLANGUAGES_USING_CPPFLAGSr   r   rz   r   r   r   r   r   r   r   r   r   r   r   r   Enumr   gnu_winlibsmsvc_winlibsr   r   r   r   r   r   r  r:  r<  r>  rG  ABCMetar   r  rf   rl   rj   <module>r     s  
 # " " " " " " 



                      ( ( ( ( ( ( ( (                                       
        " " " " " "? ?........444444''''''))))))''''''//////(((((())))))19^:>>>LQYt__; MLL"""@@@44	  C4 G4 E4 4 F4 g4 G4 "4 	'4 Z4 I4 i4  !4" I#4$ %4    ( ""$$s='((>9Ss#$$~5
444 6 s?9?qM$8$8$:$:q<NqP`qbpqqqrr0 ?
 j(oio (K (K4A4G4G4I4I(K (K (K L M M QPP 999 
"*@
A
A 
	
' '     	$ 	$ 	$ 	$% % % %% % % % 4$ $ $ $+ + + +
( ( ( (+ + + +& & & & 4" " " "+ + + +
" " " "" " " "    ty   N N N< < <
 		



5 5      &/ /         	 	 	 		_ 	_ 	_ 	_i i i i> > > >@V V V Vr	 	 	 	 	. 	 	 	         
4 
4 
4 
4 
4N 
4 
4 
4y y y y y~ y y y yx, , , , , ,rl   