
    et                       U d dl mZ d dl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 ddlmZ ej"                  rdd	lmZ dd
lmZ ddlmZ g g g dgdgdgdgdZded<    G d dee      Z G d de      Z G d de      Zy)    )annotationsN   )EnvironmentException)RSPFileSyntax   )Compilermono_buildtype_args)BasicLinkerIsCompilerMixin)MachineInfo)Environment)MachineChoicez
-optimize+)plain0g123szT.Dict[str, T.List[str]]cs_optimization_argsc                       e Zd ZdZ	 d	 	 	 d fdZe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 xZS )
CsCompilercsc                :    t         |   g ||||       || _        y N)super__init__runner)selfexelistversionfor_machineinfor   	__class__s         9/usr/lib/python3/dist-packages/mesonbuild/compilers/cs.pyr   zCsCompiler.__init__.   s    Wg{DA    c                     y)NzC sharp )clss    r$   get_display_languagezCsCompiler.get_display_language3   s    r%   c                    dgS Nz/nologor'   r   s    r$   get_always_argszCsCompiler.get_always_args7   
    {r%   c                    dgS r+   r'   r,   s    r$   get_linker_always_argsz!CsCompiler.get_linker_always_args:   r.   r%   c                    d|z   gS )Nz-out:r'   r   fnames     r$   get_output_argszCsCompiler.get_output_args=   s    %  r%   c                    d|z   gS )Nz-r:r'   r2   s     r$   get_link_argszCsCompiler.get_link_args@   s    r%   c                    dgS )Nz-warnaserrorr'   r,   s    r$   get_werror_argszCsCompiler.get_werror_argsC   s    r%   c                    g S r   r'   r,   s    r$   get_pic_argszCsCompiler.get_pic_argsF       	r%   c           
     r   t        |      D ]  \  }}|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   ||<    |S )Nr   z-L   z-lib:)	enumerateospathnormpathjoin)r   parameter_list	build_diridxis        r$   &compute_parameters_with_absolute_pathsz1CsCompiler.compute_parameters_with_absolute_pathsI   s    / 	_FC!u}&'ebgg.>.>rww||IWXYZY[W\?].^&^s#!u&'ebgg.>.>rww||IWXYZY[W\?].^&^s#		_ r%   c                    g S r   r'   )r   pch_dirheaders      r$   get_pch_use_argszCsCompiler.get_pch_use_argsS   r;   r%   c                     y)N r'   )r   header_names     r$   get_pch_namezCsCompiler.get_pch_nameV   s    r%   c                   d}d}t         j                  j                  ||      }t        |dd      5 }|j	                  t        j                  d             d d d        t        j                  | j                  | j                         z   |gz   |      }|j                          |j                  dk7  rt        d	| j                         z        | j                  r| j                  |g}n!t         j                  j                  ||      g}t        j                  ||      }	|	j                          |	j                  dk7  rt        d
| j                         z        y # 1 sw Y   
xY w)Nz	sanity.csz
sanity.exewzutf-8)encodingz
                public class Sanity {
                    static public void Main () {
                    }
                }
                )cwdr   z'C# compiler %s cannot compile programs.z9Executables created by Mono compiler %s are not runnable.)r?   r@   rB   openwritetextwrapdedent
subprocessPopenr   r-   wait
returncoder   name_stringr   )
r   work_direnvironmentsrcobjsource_nameofilepccmdlistpes
             r$   sanity_checkzCsCompiler.sanity_checkY   s0   ggll8S1+sW5 	KK )  	 dllT-A-A-CCseKQYZ
	==A&'PSWScScSe'eff;;{{C(Gww||Hc23Gg84
	==A&'beieueuew'wxx #	 	s   %E  E*c                     y)NFr'   r,   s    r$   needs_static_linkerzCsCompiler.needs_static_linkerq   s    r%   c                    t         |   S r   )r	   )r   	buildtypes     r$   get_buildtype_argszCsCompiler.get_buildtype_argst   s    "9--r%   c                    |rdgS g S )N-debugr'   )r   is_debugs     r$   get_debug_argszCsCompiler.get_debug_argsw   s    %z-2-r%   c                    t         |   S r   )r   )r   optimization_levels     r$   get_optimization_argsz CsCompiler.get_optimization_argsz   s    #$677r%   r   )
r   T.List[str]r    strr!   r   r"   'MachineInfo'r   zT.Optional[str])returnrt   )rv   rs   )r3   rt   rv   rs   )rC   rs   rD   rt   rv   rs   )rI   rt   rJ   rt   rv   rs   )rN   rt   rv   rt   )r]   rt   r^   z'Environment'rv   None)rv   boolrj   rt   rv   rs   )rn   rx   rv   rs   )rq   rt   rv   rs   )__name__
__module____qualname__languager   classmethodr)   r-   r0   r4   r6   r8   r:   rG   rK   rO   rf   rh   rk   ro   rr   __classcell__r#   s   @r$   r   r   *   s    H AE$.=
  ! :=BMy0..8r%   r   c                  0     e Zd ZdZ	 	 d fdZddZ xZS )MonoCompilermonoc                .    t         |   ||||d       y )Nr   )r   )r   r   )r   r   r    r!   r"   r#   s        r$   r   zMonoCompiler.__init__   s    ';VLr%   c                "    t         j                  S r   )r   GCCr,   s    r$   rsp_file_syntaxzMonoCompiler.rsp_file_syntax   s       r%   )r   rs   r    rt   r!   r   r"   ru   rv   z'RSPFileSyntax')rz   r{   r|   idr   r   r   r   s   @r$   r   r   ~   s    	BM$M!r%   r   c                       e Zd ZdZddZddZy)VisualStudioCsCompilercscc                    t         |   }| j                  j                         s#g }|D ]  }|dk(  rd}|j                  |        |}|S )Nrm   z-debug:portable)r	   r"   
is_windowsappend)r   rj   restmpflags        r$   rk   z)VisualStudioCsCompiler.get_buildtype_args   sU    !),yy##%C !8#,D

4 ! C
r%   c                "    t         j                  S r   )r   MSVCr,   s    r$   r   z&VisualStudioCsCompiler.rsp_file_syntax   s    !!!r%   Nry   r   )rz   r{   r|   r   rk   r   r'   r%   r$   r   r      s    	B	"r%   r   )
__future__r   os.pathr?   rX   rV   typingTmesonlibr   linkersr   	compilersr   r	   mixins.islinkerr
   TYPE_CHECKING	envconfigr   r^   r   r   r   __annotations__r   r   r   r'   r%   r$   <module>r      s    #    + # 4 7??')( "$*^*^*^*^2 . Q8+X Q8h	!: 	!"Z "r%   