
    e                        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e      Zy)    )annotationsN   )mlog)EnvironmentExceptionversion_compareLibType	OptionKey   )CompileCheckModeCompiler)MachineInfo)Environment)MachineChoicec                       e Zd ZdZdZ	 	 	 	 d fdZddZddZddZddZ	ddZ
dd	Zdd
ZddZddZddZddZddZddZ	 	 	 	 d dZd!dZd"dZej.                  df	 	 	 	 	 d#dZd$dZd$dZ xZS )%ValaCompilervalavalacc                `    t         |   g |||||       || _        t        d      h| _        y )N)is_cross
b_colorout)super__init__versionr	   base_options)selfexelistr   for_machiner   info	__class__s         ;/usr/lib/python3/dist-packages/mesonbuild/compilers/vala.pyr   zValaCompiler.__init__!   s4    Wg{D8T&|45    c                     y)NF r   s    r    needs_static_linkerz ValaCompiler.needs_static_linker'   s    r!   c                    g S Nr#   )r   optimization_levels     r    get_optimization_argsz"ValaCompiler.get_optimization_args*       	r!   c                    |rdgS g S )N--debugr#   )r   is_debugs     r    get_debug_argszValaCompiler.get_debug_args-   s    &	{.B.r!   c                    g S r'   r#   )r   
outputnames     r    get_output_argszValaCompiler.get_output_args0   r*   r!   c                    g S r'   r#   r$   s    r    get_compile_only_argsz"ValaCompiler.get_compile_only_args3   r*   r!   c                    g S r'   r#   r$   s    r    get_pic_argszValaCompiler.get_pic_args6   r*   r!   c                    g S r'   r#   r$   s    r    get_pie_argszValaCompiler.get_pie_args9   r*   r!   c                    g S r'   r#   r$   s    r    get_pie_link_argszValaCompiler.get_pie_link_args<   r*   r!   c                    dgS )Nz-Cr#   r$   s    r    get_always_argszValaCompiler.get_always_args?   s	    vr!   c                    g S r'   r#   )r   levels     r    get_warn_argszValaCompiler.get_warn_argsB   r*   r!   c                    dgS )Nz--disable-warningsr#   r$   s    r    get_no_warn_argszValaCompiler.get_no_warn_argsE   s    $%%r!   c                    dgS )Nz--fatal-warningsr#   r$   s    r    get_werror_argszValaCompiler.get_werror_argsH   s    "##r!   c                >    t        | j                  d      rd|z   gS g S )Nz>=0.37.1z--color=)r   r   )r   	colortypes     r    get_colorout_argszValaCompiler.get_colorout_argsK   s#    4<<4*++	r!   c           
        t        |      D ]L  \  }}|d d dk(  rI|d d t        j                  j                  t        j                  j	                  ||dd              z   ||<   |d d dk(  rI|d d t        j                  j                  t        j                  j	                  ||dd              z   ||<   |d d dk(  rI|d d t        j                  j                  t        j                  j	                  ||dd              z   ||<   |d d dk(  s|d d t        j                  j                  t        j                  j	                  ||dd              z   ||<   O |S )	N	   z	--girdir=
   z
--vapidir=   z--includedir=   z--metadatadir=)	enumerateospathnormpathjoin)r   parameter_list	build_diridxis        r    &compute_parameters_with_absolute_pathsz3ValaCompiler.compute_parameters_with_absolute_pathsP   sQ   / 	aFC!u#&'ebgg.>.>rww||IWXYZY[W\?].^&^s#"v%&'frww/?/?YXYZ\Z]X^@_/`&`s#"v(&'frww/?/?YXYZ\Z]X^@_/`&`s#"v))&'frww/?/?YXYZ\Z]X^@_/`&`s#	a r!   c                   d}g }||j                   j                  | j                  | j                        z  }| j                  r|| j                         z  }n3||j                   j                  | j                  | j                        z  }| j                  ||j                   |t        j                        5 }|j                  dk7  rd| j                         d}t        |      	 d d d        y # 1 sw Y   y xY w)Nz#class MesonSanityCheck : Object { }
extra_argsmoder   zVala compiler z cannot compile programs)coredataget_external_argsr   languager   r3   get_external_link_argscached_compiler   COMPILE
returncodename_stringr   )r   work_direnvironmentcodeextra_flagspmsgs          r    sanity_checkzValaCompiler.sanity_check^   s    4#%{++==d>N>NPTP]P]^^==45577K;//FFtGWGWY]YfYfggK  {';';ZjZrZr s 	0wx||q &t'7'7'9&<<TU*3// !	0 	0 	0s   8/C11C:c                    |dv rdgS g S )N>   debugminsizedebugoptimizedr,   r#   )r   	buildtypes     r    get_buildtype_argszValaCompiler.get_buildtype_argsk   s    >>;	r!   Tc                @   |rt        |t              r|g}|sd}g }||j                  j                  | j                  | j
                        z  }d|g}||z  }| j                  ||j                  |t        j                        5 }	|	j                  dk(  r|cd d d        S 	 d d d        |D ]I  }
t        j                  j                  |
|dz         }t        j                  j                  |      sF|gc S  t        j                  d|d|d       y # 1 sw Y   txY w)	Nz#class MesonFindLibrary : Object { }z--pkgrV   r   z.vapiz	Searched z and z wasn't found)
isinstancestrrY   rZ   r   r[   r]   r   r^   r_   rL   rM   rO   isfiler   ri   )r   libnameenv
extra_dirslibtypelib_prefix_warningrc   args	vapi_argsre   dvapis               r    find_libraryzValaCompiler.find_libraryp   s   *Z5$J 8D "DCLL2243C3CT]]SSD '*IID$$T3<<DO_OgOg$h %lm<<1$$% %$%  	A77<<7W#45Dww~~d#v	 	

YznE'NKL% %s   DDc                    g S r'   r#   r   rs   s     r    thread_flagszValaCompiler.thread_flags   r*   r!   c                    g S r'   r#   r}   s     r    thread_link_flagszValaCompiler.thread_link_flags   r*   r!   )
r   T.List[str]r   rp   r   r   r   boolr   z'MachineInfo')returnr   )r(   rp   r   r   )r-   r   r   r   )r0   rp   r   r   )r   r   )r=   rp   r   r   )rD   rp   r   r   )rP   r   rQ   rp   r   r   )ra   rp   rb   'Environment'r   None)rl   rp   r   r   )rr   rp   rs   r   rt   r   ru   r   rv   r   r   zT.Optional[T.List[str]])rs   r   r   r   )__name__
__module____qualname__r[   idr   r%   r)   r.   r1   r3   r5   r7   r9   r;   r>   r@   rB   rE   rT   rg   rm   r   PREFER_SHAREDr{   r~   r   __classcell__)r   s   @r    r   r      s    H	B66'46/&$
:=BM0 )0(=(=Z^%SWcz.r!   r   )
__future__r   os.pathrL   typingT r   mesonlibr   r   r   r	   	compilersr   r   TYPE_CHECKING	envconfigr   rb   r   r   r   r#   r!   r    <module>r      s:    #    P P 1??')(o8 or!   