
    -Ph-                    z   U 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mZmZmZmZ ddlmZ dd	lmZ d
dlmZ ej        rddlmZ ddlmZ ddlmZ ddlmZ eZneZdgdgdgdZded<   g dgdgdgdgdgdgdZ ded<   ddd d!d"Z! G d# d$e          Z" G d% d&e          Z# G d' d(e          Z$dS ))    )annotationsN   )mesonlib)options)AppleDynamicLinkerClangClDynamicLinkerLLVMDynamicLinkerGnuGoldDynamicLinkerMoldDynamicLinkerMSVCDynamicLinker)	OptionKey   )CompileCheckMode   )GnuLikeCompiler)MutableKeyedOptionDictType)Environment)
Dependency)Compilerz-fdiagnostics-color=autoz-fdiagnostics-color=alwaysz-fdiagnostics-color=never)autoalwaysneverzT.Dict[str, T.List[str]]clang_color_argsz-O0z-Ogz-O1z-O2z-O3z-Oz)plain0g123sclang_optimization_argsczc++zobjective-czobjective-c++)r"   cppobjcobjcppc                       e Zd ZdZd9 fdZd:d	Zd;dZd<dZd=dZd>dZ	d?dZ
d@ fdZddddA fd#ZdBd%ZdC fd'ZedD fd*            ZdEd,ZdFd-Zd.d/d0dG fd3ZdHd5Zd.d/dd6dId8Z xZS )JClangCompilerclangdefinesT.Optional[T.Dict[str, str]]c           	     T   t                                                       |pi | _        | j                            t          d          t          d          t          d          t          d          t          d          h           t          | j        t                    r(| j        	                    t          d                     nAt          | j        t                    r'| j        	                    t          d                     | j        	                    d           d S )	N
b_coloroutb_lto_threads
b_lto_modeb_thinlto_cacheb_thinlto_cache_dir	b_bitcodeb_vscrtll)super__init__r)   base_optionsupdater   
isinstancelinkerr   addr   can_compile_suffixes)selfr)   	__class__s     a/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mesonbuild/compilers/mixins/clang.pyr5   zClangCompiler.__init__9   s   }"  |$$i&@&@)LBYBY[dev[w[w,--/	0 	0 	0 dk#566 	8!!)K"8"89999%677 	8!!)I"6"6777!%%d+++++    	colortypestrreturnT.List[str]c                ,    t           |         d d          S N)r   )r<   r@   s     r>   get_colorout_argszClangCompiler.get_colorout_argsI   s    	*111--r?   defineboolc                    || j         v S rE   )r)   r<   rG   s     r>   has_builtin_definez ClangCompiler.has_builtin_defineL   s    %%r?   T.Optional[str]c                6    | j                             |          S rE   )r)   getrJ   s     r>   get_builtin_definez ClangCompiler.get_builtin_defineO   s    |'''r?   optimization_levelc                    t           |         S rE   )r!   )r<   rP   s     r>   get_optimization_argsz#ClangCompiler.get_optimization_argsR   s    &'9::r?   c                    dS )Npch r<   s    r>   get_pch_suffixzClangCompiler.get_pch_suffixU   s    ur?   pch_dirheaderc                l    dt           j                            ||                     |                    gS )Nz-include-pch)ospathjoinget_pch_name)r<   rX   rY   s      r>   get_pch_use_argszClangCompiler.get_pch_use_argsX   s-     Wd6G6G6O6O P PQQr?   moder   c                    dg}|t           j        u rF|                    ddg           t          j        | j        d          r|                    d           t                                          |          |z   S )Nz%-Werror=implicit-function-declarationz-Werror=unknown-warning-optionz$-Werror=unused-command-line-argumentz>=3.6.0z%-Werror=ignored-optimization-argument)	r   COMPILEextendr   version_compareversionappendr4   get_compiler_check_args)r<   r`   myargsr=   s      r>   rg   z%ClangCompiler.get_compiler_check_args^   s~    &  GG#+++MM;=cdeee'i@@ GEFFFww..t44v==r?   N
extra_argsdependenciesfuncnameprefixenv'Environment'rj   T.Optional[T.List[str]]rk    T.Optional[T.List['Dependency']]T.Tuple[bool, bool]c                   |g }t          | j        t                    r/t          j        | j        d          r|                    d           t                                          |||||          S )Nz>=8.0z-Wl,-no_weak_importsri   )	r8   r9   r   r   rd   re   rf   r4   has_function)r<   rl   rm   rn   rj   rk   r=   s         r>   rt   zClangCompiler.has_functionx   s     J dk#566 	68;STXT`bi;j;j 	64555ww##Hfcj1= $ ? ? 	?r?   r   c                z    t          j        | j        d          rdgS t          j        | j        d          rdgS g S )Nz>=3.8.0z-fopenmpz>=3.7.0z-fopenmp=libomp)r   rd   re   )r<   rn   s     r>   openmp_flagszClangCompiler.openmp_flags   sH    #DL)<< 	<%dlI>> 	%&& Ir?   defsfilec                    t          | j        t          t          f          rd|z   gS t	                                          |          S )Nz	-Wl,/DEF:)r8   r9   r   r   r4   gen_vs_module_defs_args)r<   rw   r=   s     r>   ry   z%ClangCompiler.gen_vs_module_defs_args   sF    dk$8:K#LMM 	,  (*++ww..x888r?   r9   re   c                    |dk    rdgS |dk    rdgS t          j        |          r2t          j        |          st          j        d| d          d| gS t	                                          ||          S )Nqcldz-fuse-ld=qcldmoldz-fuse-ld=moldzCannot find linker .	-fuse-ld=)shutilwhichr   MesonExceptionr4   use_linker_args)clsr9   re   r=   s      r>   r   zClangCompiler.use_linker_args   s     V#$$V#$$< 	*<'' 5-3&3335 5 5((())ww&&vw777r?   namec                    dgS )Nz-Werror=attributesrU   )r<   r   s     r>   !get_has_func_attribute_extra_argsz/ClangCompiler.get_has_func_attribute_extra_args   s     %%%r?   c                    dgS )Nz
--coveragerU   rV   s    r>   get_coverage_link_argsz$ClangCompiler.get_coverage_link_args   s
    ~r?   r   defaultthreadsr`   r   intc                  g }|dk    rt          | j        t                    r4t          j        | j        j        d          st          j        d          nNt          | j        t          t          t          t          f          s!t          j        d| j        j                   |                    d|            nE|dk    s
J d            |                    t                                          |                     |S )	Nthinz>=1.1z!LLVM's ThinLTO requires mold 1.1+zFLLVM's ThinLTO only works with gold, lld, lld-link, ld64 or mold, not z-flto=r   z#someone forgot to wire something up)r   )r8   r9   r   r   rd   re   r   r   r   r	   r
   idrf   rc   r4   get_lto_compile_args)r<   r   r`   argsr=   s       r>   r   z"ClangCompiler.get_lto_compile_args   s!   6>>$+(9;; I/0CWMM W"12UVVVW.@BVXik  .A  B  B I-  /Hw{  xC  xF  /H  /H  I  I  IKK((((9$$$&K$$$KK44W4EEFFFr?   r   c                `    t          | j        t          t          f          rd |D             S |S )Nc                p    g | ]3}|                     d           s|                     d          r|nd | 4S )z-Wl,r~   )
startswith).0flags     r>   
<listcomp>z9ClangCompiler.linker_to_compiler_args.<locals>.<listcomp>   sI    xxxkoDOOF33ft{7S7SfDDYf`dYfYfxxxr?   )r8   r9   r   r   )r<   r   s     r>   linker_to_compiler_argsz%ClangCompiler.linker_to_compiler_args   s7    dk$8:K#LMM 	xxswxxxxKr?   )r   r`   thinlto_cache_dirr   c               6   |                      ||          }|dk    r/|-|                    | j                            |                     |dk    rFt	          j        | j        d          st	          j        d          |                    d|            |S )Nr   r   r   z>=4.0.0z2clang support for LTO threads requires clang >=4.0z-flto-jobs=)	r   rc   r9   get_thinlto_cache_argsr   rd   re   r   rf   )r<   r   r`   r   r   s        r>   get_lto_link_argszClangCompiler.get_lto_link_args   s    ((t(DD6>>/; KK::;LMMNNNQ;;+DL)DD d-.bcccKK/g//000r?   )r)   r*   )r@   rA   rB   rC   )rG   rA   rB   rH   )rG   rA   rB   rL   )rP   rA   rB   rC   )rB   rA   )rX   rA   rY   rA   rB   rC   )r`   r   rB   rC   )rl   rA   rm   rA   rn   ro   rj   rp   rk   rq   rB   rr   )rn   r   rB   rC   )rw   rA   rB   rC   )r9   rA   re   rA   rB   rC   )r   rA   rB   rC   )rB   rC   )r   r   r`   rA   rB   rC   )r   rC   rB   rC   )r   r   r`   rA   r   rL   rB   rC   )__name__
__module____qualname__r   r5   rF   rK   rO   rR   rW   r_   rg   rt   rv   ry   classmethodr   r   r   r   r   r   __classcell__r=   s   @r>   r'   r'   5   s       	B, , , , , , . . . .& & & &( ( ( (; ; ; ;   R R R R> > > > > >6 <@FJ? ? ? ? ? ? ? ?   9 9 9 9 9 9 8 8 8 8 8 [8&& & & &
    67I             34?C         r?   r'   c                  8     e Zd ZdZdZdZdZdZdZd
 fd	Z	 xZ
S )
ClangCStdszMixin class for clang based compilers for setting C standards.

    This is used by both ClangCCompiler and ClangClCompiler, as they share
    the same versions
    z>=6.0.0z>=8.0.0z>=9.0.0z>=18.0.0z>=19.0.0rB   r   c                r   t                                                      }g d}t          j        | j        | j                  r|dgz  }t          j        | j        | j                  r|dgz  }t          j        | j        | j                  r|dgz  }t          j        | j        | j                  r|dgz  }t          j        | j        | j	                  r|dgz  }| 
                    d          }||         }t          |t          j                  s
J d            |                    |d	
           |S )N)c89c99c11c17c18c2xc23c2ystdfor mypyTgnu)r4   get_optionsr   rd   re   _C17_VERSION_C18_VERSION_C2X_VERSION_C23_VERSION_C2Y_VERSIONform_compileropt_keyr8   r   UserStdOptionset_versionsr<   optsstdskeystd_optr=   s        r>   r   zClangCStds.get_options   s9   ww""$$$$$ #DL$2CDD 	UGOD#DL$2CDD 	UGOD#DL$2CDD 	UGOD#DL$2CDD 	UGOD#DL$2CDD 	UGOD''..s)'7#899EE:EEETt,,,r?   rB   r   )r   r   r   __doc__r   r   r   r   r   r   r   r   s   @r>   r   r      sb          LLLLL         r?   r   c                  ,     e Zd ZdZdZdZd fdZ xZS )ClangCPPStdszoMixin class for clang based compilers for setting C++ standards.

    This is used by the ClangCPPCompiler
    z>=12.0.0z>=17.0.0rB   r   c                   t                                                      }g d}t          j        | j        | j                  r|                    d           t          j        | j        | j                  r|                    d           |                     d          }||         }t          |t          j                  s
J d            |                    |d           |S )N)zc++98zc++03zc++11zc++14zc++17zc++1zzc++2azc++20zc++23zc++26r   r   Tr   )r4   r   r   rd   re   _CPP23_VERSIONrf   _CPP26_VERSIONr   r8   r   r   r   r   s        r>   r   zClangCPPStds.get_options  s    ww""$$
 
 
 #DL$2EFF 	!KK   #DL$2EFF 	!KK   ''..s)'7#899EE:EEETt,,,r?   r   )r   r   r   r   r   r   r   r   r   s   @r>   r   r      sS         
  NN         r?   r   )%
__future__r   r[   r   typingT r   r   linkers.linkersr   r   r	   r
   r   r   r   	compilersr   r   r   TYPE_CHECKINGr   environmentr   rk   r   r   CompilerMixinBaseobjectr   __annotations__r!   clang_lang_mapr'   r   r   rU   r?   r>   <module>r      so   # " " " " " " 6 				                 ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )             ( ( ( ( ( (            ? 555555************$$$$$$  ((+,)*. .      





5 5      
	 ` ` ` ` `O ` ` `F! ! ! ! !" ! ! !H    $     r?   