
    e                       d dl mZ d dlZddlmZ ddlmZ ddlm	Z	 ddl
mZ dd	lmZmZ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 ddlmZ  G d de	e      Z G d dee      Z G d dee      Z G d de      Zy)    )annotationsN   )coredata)	OptionKey   )CLikeCompiler)Compiler)GnuCompilergnu_common_warning_argsgnu_objc_warning_args)ClangCompiler)ExternalProgram)MachineInfo)Environment)DynamicLinker)MachineChoicec                  J    e Zd ZdZ	 	 d	 	 	 	 	 	 	 	 	 ddZedd       Zd	dZy)
ObjCPPCompilerobjcppNc
                l    t        j                  | |||||||	|	       t        j                  | |       y )N)is_crossfull_versionlinker)r	   __init__r   )
selfccacheexelistversionfor_machiner   infoexe_wrapr   r   s
             =/usr/lib/python3/dist-packages/mesonbuild/compilers/objcpp.pyr   zObjCPPCompiler.__init__%   s8    
 	$+t#+,!'	) 	tX.    c                      y)NzObjective-C++ r%   r#   r"   get_display_languagez#ObjCPPCompiler.get_display_language/   s    r#   c                .    d}| j                  ||d|      S )Nz<#import<stdio.h>
class MyClass;int main(void) { return 0; }
zsanitycheckobjcpp.mm)_sanity_check_impl)r   work_direnvironmentcodes       r"   sanity_checkzObjCPPCompiler.sanity_check3   s     O&&x>TVZ[[r#   )NN)r   T.List[str]r   r-   r   strr   r   r   boolr    'MachineInfo'r!   T.Optional['ExternalProgram']r   T.Optional['DynamicLinker']r   T.Optional[str])returnr.   )r)   r.   r*   z'Environment'r4   None)__name__
__module____qualname__languager   staticmethodr&   r,   r%   r#   r"   r   r   !   sZ    H
 8<15	//'4/8/ 5/  /	/  \r#   r   c                  4    e Zd Z	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 ddZy)GnuObjCPPCompilerNc                   t         j                  | ||||||||	|

       t        j                  | |       ddg}g ||dgz   |ddgz   |ddgz   | j                  t              z   | j                  t
              z   d| _        y )Nr   r   -Wall-Winvalid-pch-Wextra
-Wpedantic0123
everything)r   r   r
   supported_warn_argsr   r   	warn_argsr   r   r   r   r   r   r    exe_wrapperdefinesr   r   default_warn_argss               r"   r   zGnuObjCPPCompiler.__init__9   s     	fgwX $k&| 	  	]T7+$o6!00I;>0I|3LL):i=V)V)-)A)ABY)Z*[)-)A)ABW)X*Y	[r#   NNNNr   r-   r   r-   r   r.   r   r   r   r/   r    r0   rL   r1   rM   zT.Optional[T.Dict[str, str]]r   r2   r   r3   )r6   r7   r8   r   r%   r#   r"   r<   r<   8   sS     ?C9=7;15[['4[;[ 7[ 5	[
  /[r#   r<   c                  P     e Zd Z	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 ddZd fdZddZ xZS )ClangObjCPPCompilerc                    t         j                  | ||||||||	|

       t        j                  | |       ddg}g ||dgz   |ddgz   dgd| _        y )Nr>   r?   r@   rA   rB   z-WeverythingrC   )r   r   r   rJ   rK   s               r"   r   zClangObjCPPCompiler.__init__N   st     	fgwX $k&| 	  	]tW-$o6!00I;>0I|3LL)7(8	:r#   c                    t         |          }|j                  t        d| j                  d      t        j                  dg dd      i       |S )NstdcppmachinelangzC++ language standard to use)nonezc++98zc++11zc++14zc++17zc++20zc++2bzgnu++98zgnu++11zgnu++14zgnu++17zgnu++20zgnu++2brZ   )superget_optionsupdater   r   r   UserComboOption)r   opts	__class__s     r"   r\   zClangObjCPPCompiler.get_options^   sU    w"$eT%5%5EBHD\D\. E
 	 r#   c                    g }|t        d| j                  d         }|j                  dk7  r|j                  d|j                  z          |S )NrU   rV   rW   rZ   z-std=)r   r   valueappend)r   optionsargsrU   s       r"   get_option_compile_argsz+ClangObjCPPCompiler.get_option_compile_argsk   sF    it/?/?eLM99KK#))+,r#   rO   rP   )r4   z%'coredata.MutableKeyedOptionDictType')rd   z'coredata.KeyedOptionDictType'r4   r-   )r6   r7   r8   r   r\   rf   __classcell__)r`   s   @r"   rR   rR   L   sW     ?C9=7;15::'4:;: 7: 5	:
  /: r#   rR   c                      e Zd ZdZy)AppleClangObjCPPCompilerz?Handle the differences between Apple's clang and vanilla clang.N)r6   r7   r8   __doc__r%   r#   r"   ri   ri   s   s    Ir#   ri   ) 
__future__r   typingT r   mesonlibr   mixins.cliker   	compilersr	   
mixins.gnur
   r   r   mixins.clangr   TYPE_CHECKINGprogramsr   	envconfigr   r*   r   linkers.linkersr   r   r   r<   rR   ri   r%   r#   r"   <module>rx      sv    #     '  S S '??*')/(\]H \.[^ [($- $NJ2 Jr#   