o
    e                     @  s   d dl mZ d dlZd dlZddlmZ ddlm	Z	m
Z
mZmZ ddlmZmZ ejr=ddlmZ dd	lmZ dd
lmZ G dd deZdS )    )annotationsN   )mlog)EnvironmentExceptionversion_compareLibType	OptionKey   )CompileCheckModeCompiler)MachineInfo)Environment)MachineChoicec                      s   e Zd ZdZdZdJ fddZdKddZdLddZdMddZdNddZ	dOddZ
dOddZdOdd ZdOd!d"ZdOd#d$ZdPd&d'ZdOd(d)ZdOd*d+ZdQd-d.ZdRd1d2ZdSd7d8ZdTd:d;Zejd<fdUdDdEZdVdFdGZdVdHdIZ  ZS )WValaCompilerZvalaZvalacexelistT.List[str]versionstrfor_machiner   is_crossboolinfo'MachineInfo'c                   s.   t  jg |||||d || _tdh| _d S )N)r   Z
b_colorout)super__init__r   r   Zbase_options)selfr   r   r   r   r   	__class__ >/usr/lib/python3.10/site-packages/mesonbuild/compilers/vala.pyr   !   s   zValaCompiler.__init__returnc                 C  s   dS )NFr   r   r   r   r   needs_static_linker'      z ValaCompiler.needs_static_linkeroptimization_levelc                 C     g S Nr   )r   r$   r   r   r   get_optimization_args*   r#   z"ValaCompiler.get_optimization_argsis_debugc                 C  s   |rdgS g S )N--debugr   )r   r(   r   r   r   get_debug_args-   s   zValaCompiler.get_debug_args
outputnamec                 C  r%   r&   r   )r   r+   r   r   r   get_output_args0   r#   zValaCompiler.get_output_argsc                 C  r%   r&   r   r!   r   r   r   get_compile_only_args3   r#   z"ValaCompiler.get_compile_only_argsc                 C  r%   r&   r   r!   r   r   r   get_pic_args6   r#   zValaCompiler.get_pic_argsc                 C  r%   r&   r   r!   r   r   r   get_pie_args9   r#   zValaCompiler.get_pie_argsc                 C  r%   r&   r   r!   r   r   r   get_pie_link_args<   r#   zValaCompiler.get_pie_link_argsc                 C     dgS )Nz-Cr   r!   r   r   r   get_always_args?      zValaCompiler.get_always_argslevelc                 C  r%   r&   r   )r   r4   r   r   r   get_warn_argsB   r#   zValaCompiler.get_warn_argsc                 C  r1   )Nz--disable-warningsr   r!   r   r   r   get_no_warn_argsE   r3   zValaCompiler.get_no_warn_argsc                 C  r1   )Nz--fatal-warningsr   r!   r   r   r   get_werror_argsH   r3   zValaCompiler.get_werror_args	colortypec                 C  s   t | jdrd| gS g S )Nz>=0.37.1z--color=)r   r   )r   r8   r   r   r   get_colorout_argsK   s   
zValaCompiler.get_colorout_argsparameter_list	build_dirc              
   C  s  t |D ]\}}|d d dkr'|d d tjtj||dd   ||< |d d dkrF|d d tjtj||dd   ||< |d d dkre|d d tjtj||dd   ||< |d d dkr|d d tjtj||dd   ||< q|S )	N	   z	--girdir=
   z
--vapidir=   z--includedir=   z--metadatadir=)	enumerateospathnormpathjoin)r   r:   r;   idxir   r   r   &compute_parameters_with_absolute_pathsP   s   ....z3ValaCompiler.compute_parameters_with_absolute_pathswork_direnvironment'Environment'Nonec                 C  s   d}g }||j | j| j7 }| jr||  7 }n||j | j| j7 }| j||j |tj	d}|j
dkrAd|  d}t|W d    d S 1 sLw   Y  d S )Nz#class MesonSanityCheck : Object { }
extra_argsmoder   zVala compiler z cannot compile programs)coredataget_external_argsr   languager   r-   Zget_external_link_argscached_compiler
   COMPILE
returncodeZname_stringr   )r   rH   rI   codeextra_flagspmsgr   r   r   sanity_check^   s   
"zValaCompiler.sanity_check	buildtypec                 C  s   |dv rdgS g S )N>   debugZminsizeZdebugoptimizedr)   r   )r   rZ   r   r   r   get_buildtype_argsk   s   zValaCompiler.get_buildtype_argsTlibnameenv
extra_dirslibtyper   lib_prefix_warningT.Optional[T.List[str]]c                 C  s   |r
t |tr
|g}|sLd}g }||j| j| j7 }d|g}||7 }| j||j|tjd}	|	j	dkr=|W  d    S W d    n1 sGw   Y  |D ]}
t
j|
|d }t
j|rd|g  S qNtd|d|d d S )	Nz#class MesonFindLibrary : Object { }z--pkgrL   r   z.vapiz	Searched z and z wasn't found)
isinstancer   rO   rP   r   rQ   rR   r
   rS   rT   rA   rB   rD   isfiler   r[   )r   r]   r^   r_   r`   ra   rU   argsZ	vapi_argsrW   dZvapir   r   r   find_libraryp   s*   

zValaCompiler.find_libraryc                 C  r%   r&   r   r   r^   r   r   r   thread_flags   r#   zValaCompiler.thread_flagsc                 C  r%   r&   r   rh   r   r   r   thread_link_flags   r#   zValaCompiler.thread_link_flags)
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   )r4   r   r    r   )r8   r   r    r   )r:   r   r;   r   r    r   )rH   r   rI   rJ   r    rK   )rZ   r   r    r   )r]   r   r^   rJ   r_   r   r`   r   ra   r   r    rb   )r^   rJ   r    r   )__name__
__module____qualname__rQ   idr   r"   r'   r*   r,   r-   r.   r/   r0   r2   r5   r6   r7   r9   rG   rY   r\   r   ZPREFER_SHAREDrg   ri   rj   __classcell__r   r   r   r   r      s0    
















r   )
__future__r   os.pathrA   typingT r   Zmesonlibr   r   r   r   	compilersr
   r   TYPE_CHECKINGZ	envconfigr   rI   r   r   r   r   r   r   r   <module>   s   