
    e.                        U d dl mZ d dlZd dlZd dlZddlmZ ddl	m
Z
mZ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 g g g dgdgdgdgdZded<    G d de
      Zy)    )annotationsN   )EnvironmentException   )Compilerswift_buildtype_argsclike_debug_args)MachineInfo)Environment)DynamicLinker)MachineChoicez-O)plain0g123szT.Dict[str, T.List[str]]swift_optimization_argsc                       e Zd ZdgZdZdZ	 	 d	 	 	 	 	 	 	 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d&dZd'dZ xZS )(SwiftCompilerz-Xlinkerswiftllvmc           
     B    t         |   g |||||||       || _        y )N)is_crossfull_versionlinker)super__init__version)	selfexelistr    for_machiner   infor   r   	__class__s	           </usr/lib/python3/dist-packages/mesonbuild/compilers/swift.pyr   zSwiftCompiler.__init__-   s2     	Wg{D"* & 	 	(     c                     y)NT r!   s    r&   needs_static_linkerz!SwiftCompiler.needs_static_linker5   s    r'   c                    dgS )Nz--fatal-warningsr)   r*   s    r&   get_werror_argszSwiftCompiler.get_werror_args8       "##r'   c                    dgS )Nz-emit-dependenciesr)   )r!   	outtargetoutfiles      r&   get_dependency_gen_argsz%SwiftCompiler.get_dependency_gen_args;   s    $%%r'   c                n    t         j                  j                  |      d   dz   | j                         z   S )Nr   .)ospathsplitextget_depfile_suffix)r!   objfiles     r&   depfile_for_objectz SwiftCompiler.depfile_for_object>   s/    ww(+c1D4K4K4MMMr'   c                     y)Ndr)   r*   s    r&   r8   z SwiftCompiler.get_depfile_suffixA   s    r'   c                
    d|gS )N-or)   )r!   targets     r&   get_output_argszSwiftCompiler.get_output_argsD   s    f~r'   c                
    d|gS )Nz-import-objc-headerr)   )r!   
headernames     r&   get_header_import_argsz$SwiftCompiler.get_header_import_argsG   s    %z22r'   c                    g S Nr)   )r!   levels     r&   get_warn_argszSwiftCompiler.get_warn_argsJ   s    	r'   c                    t         |   S rE   )r   )r!   	buildtypes     r&   get_buildtype_argsz SwiftCompiler.get_buildtype_argsM   s    #I..r'   c                    dgS )N-emit-executabler)   r*   s    r&   get_std_exe_link_argsz#SwiftCompiler.get_std_exe_link_argsP   r.   r'   c                
    d|gS )Nz-module-namer)   )r!   modnames     r&   get_module_argszSwiftCompiler.get_module_argsS   s    ((r'   c                    dgS )Nz-emit-moduler)   r*   s    r&   get_mod_gen_argszSwiftCompiler.get_mod_gen_argsV   s    r'   c                    d|z   gS )N-Ir)   )r!   r6   	is_systems      r&   get_include_argszSwiftCompiler.get_include_argsY   s    t}r'   c                    dgS )Nz-cr)   r*   s    r&   get_compile_only_argsz#SwiftCompiler.get_compile_only_args\   s	    vr'   c           
         t        |      D ]_  \  }}|d d dk(  s	|d d dk(  s|d d t        j                  j                  t        j                  j	                  ||dd              z   ||<   a |S )Nr   rT   z-L)	enumerater5   r6   normpathjoin)r!   parameter_list	build_diridxis        r&   &compute_parameters_with_absolute_pathsz4SwiftCompiler.compute_parameters_with_absolute_paths_   sz    / 	_FC!u}"1&'ebgg.>.>rww||IWXYZY[W\?].^&^s#	_ r'   c                N   d}t         j                  j                  ||      }t         j                  j                  |d      }g }||j                  j	                  | j
                  | j                        z  }| j                  r|| j                         z  }n3||j                  j                  | j
                  | j                        z  }t        |dd      5 }|j                  d       d d d        t        j                  | j                  |z   dd||gz   |	      }|j                          |j                   d
k7  rt#        d| j%                         z        | j                  ry t        j&                  |      d
k7  rt#        d| j%                         z        y # 1 sw Y   xY w)Nzswifttest.swift	swifttestwzutf-8)encodingz'print("Swift compilation is working.")
rL   r>   )cwdr   z*Swift compiler %s cannot compile programs.z:Executables created by Swift compiler %s are not runnable.)r5   r6   r\   coredataget_external_argsr#   languager   rX   get_external_link_argsopenwrite
subprocessPopenr"   wait
returncoder   name_stringcall)	r!   work_direnvironmentsrcsource_nameoutput_nameextra_flagsofilepcs	            r&   sanity_checkzSwiftCompiler.sanity_checkg   sq   ggll8S1ggll8[9#%{++==d>N>NPTP]P]^^==45577K;//FFtGWGWY]YfYfggK+sW5 	KK  	 dll[8<NPTVacf;ggmuv
	==A&'SVZVfVfVh'hii==??;'1,&'cfjfvfvfx'xyy -	 	s   FF$c                    t         |   S rE   )r	   )r!   is_debugs     r&   get_debug_argszSwiftCompiler.get_debug_args~   s    ))r'   c                    t         |   S rE   )r   )r!   optimization_levels     r&   get_optimization_argsz#SwiftCompiler.get_optimization_args   s    &'9::r'   )NN)r"   T.List[str]r    strr#   r   r   boolr$   z'MachineInfo'r   T.Optional[str]r   zT.Optional['DynamicLinker'])returnr   )r   r   )r0   r   r1   r   r   r   )r9   r   r   r   )r   r   )r?   r   r   r   )rB   r   r   r   )rF   r   r   r   )rI   r   r   r   )rO   r   r   r   )r6   r   rU   r   r   r   )r]   r   r^   r   r   r   )rs   r   rt   z'Environment'r   None)r}   r   r   r   )r   r   r   r   )__name__
__module____qualname__LINKER_PREFIXri   idr   r+   r-   r2   r:   r8   r@   rC   rG   rJ   rM   rP   rR   rV   rX   ra   r{   r~   r   __classcell__)r%   s   @r&   r   r   '   s    LMH	B W[7;'4DS4$&N3/$) :=BMz.*;r'   r   )
__future__r   rm   os.pathr5   typingTmesonlibr   	compilersr   r   r	   TYPE_CHECKING	envconfigr
   rt   r   linkers.linkersr   r   r   __annotations__r   r)   r'   r&   <module>r      si    #   + G G??')/( 		



5 1 [;H [;r'   