o
    e                     @  s   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rSd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 de	eZG dd deeZG dd deeZG dd deZdS )    )annotationsN   )coredata)	OptionKey   )CLikeCompiler)Compiler)GnuCompilergnu_common_warning_argsgnu_objc_warning_args)ClangCompiler)ExternalProgram)MachineInfo)Environment)DynamicLinker)MachineChoicec                   @  s8   e Zd ZdZ		dd ddZed!ddZd"ddZdS )#ObjCPPCompilerZobjcppNccacheT.List[str]exelistversionstrfor_machiner   is_crossboolinfo'MachineInfo'exe_wrapT.Optional['ExternalProgram']linkerT.Optional['DynamicLinker']full_versionT.Optional[str]c
           
      C  s,   t j| |||||||	|d	 t| | d S )N)r   r!   r   )r   __init__r   )
selfr   r   r   r   r   r   r   r   r!    r%   @/usr/lib/python3.10/site-packages/mesonbuild/compilers/objcpp.pyr#   %   s
   zObjCPPCompiler.__init__returnc                   C  s   dS )NzObjective-C++r%   r%   r%   r%   r&   get_display_language/   s   z#ObjCPPCompiler.get_display_languagework_direnvironment'Environment'Nonec                 C  s   d}|  ||d|S )Nz<#import<stdio.h>
class MyClass;int main(void) { return 0; }
zsanitycheckobjcpp.mm)Z_sanity_check_impl)r$   r)   r*   coder%   r%   r&   sanity_check3   s   zObjCPPCompiler.sanity_check)NN)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,   )__name__
__module____qualname__languager#   staticmethodr(   r.   r%   r%   r%   r&   r   !   s    
r   c                   @  s    e Zd Z				ddddZdS )GnuObjCPPCompilerNr   r   r   r   r   r   r   r   r   r   r   exe_wrapperr   definesT.Optional[T.Dict[str, str]]r   r    r!   r"   c                 C  sr   t j| ||||||||	|
d
 t| | ddg}g ||dg |ddg |ddg | t | t d| _d S )Nr   r!   -Wall-Winvalid-pch-Wextra
-Wpedantic0123Z
everything)r   r#   r	   Zsupported_warn_argsr
   r   	warn_argsr$   r   r   r   r   r   r   r5   r6   r   r!   Zdefault_warn_argsr%   r%   r&   r#   9   s   

zGnuObjCPPCompiler.__init__NNNNr   r   r   r   r   r   r   r   r   r   r   r   r5   r   r6   r7   r   r    r!   r"   )r/   r0   r1   r#   r%   r%   r%   r&   r4   8   s    r4   c                      s<   e Zd Z				dd ddZd! fddZd"ddZ  ZS )#ClangObjCPPCompilerNr   r   r   r   r   r   r   r   r   r   r   r5   r   r6   r7   r   r    r!   r"   c                 C  sX   t j| ||||||||	|
d
 t| | ddg}g ||dg |ddg dgd| _d S )Nr8   r9   r:   r;   r<   z-Weverythingr=   )r   r#   r   rB   rC   r%   r%   r&   r#   N   s   
zClangObjCPPCompiler.__init__r'   %'coredata.MutableKeyedOptionDictType'c                   s6   t   }|td| jddt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++2brM   )superget_optionsupdater   r   r   ZUserComboOption)r$   opts	__class__r%   r&   rO   ^   s   
	zClangObjCPPCompiler.get_optionsoptions'coredata.KeyedOptionDictType'c                 C  s6   g }|t d| jdd }|jdkr|d|j  |S )NrH   rI   rJ   rM   z-std=)r   r   valueappend)r$   rT   argsrH   r%   r%   r&   get_option_compile_argsk   s
   
z+ClangObjCPPCompiler.get_option_compile_argsrD   rE   )r'   rG   )rT   rU   r'   r   )r/   r0   r1   r#   rO   rY   __classcell__r%   r%   rR   r&   rF   L   s    rF   c                   @  s   e Zd ZdZdS )AppleClangObjCPPCompilerz?Handle the differences between Apple's clang and vanilla clang.N)r/   r0   r1   __doc__r%   r%   r%   r&   r[   s   s    r[   ) 
__future__r   typingT r   Zmesonlibr   Zmixins.cliker   	compilersr   Z
mixins.gnur	   r
   r   Zmixins.clangr   TYPE_CHECKINGZprogramsr   Z	envconfigr   r*   r   Zlinkers.linkersr   r   r   r4   rF   r[   r%   r%   r%   r&   <module>   s$   '