
_rY ,                 @   s   d  d l  Z d  d l Z d d l m Z m Z d d l m Z m Z m	 Z	 m
 Z
 m Z m Z m Z m Z Gd d   d e  Z Gd d	   d	 e  Z Gd
 d   d e  Z Gd d   d e  Z d S)    N   )EnvironmentExceptionversion_compare   )GCC_STANDARDd_dmd_buildtype_argsd_gdc_buildtype_argsd_ldc_buildtype_argsget_gcc_soname_argsgnu_color_argsCompilerCompilerArgsc                   s  e  Z d  Z   f 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" d#  Z d$ d$ d! d% d&  Z d' d(   Z e d) d*    Z   S)+	DCompilerc                s2   d |  _  t   j | |  d |  _ | |  _ d  S)Ndunknown)languagesuper__init__idis_cross)selfexelistversionr   )	__class__ R/mnt/raid6/a/bak/reczko/tools/protein/utils/meson-0.42.1/mesonbuild/compilers/d.pyr      s    		zDCompiler.__init__c          
   C   s   t  j j | d  } t  j j | d  } t | d   } | j d  Wd  QXt j |  j |  j |  | g d | } | j	   | j
 d k r t d |  j     n  t j |  d k r t d |  j     n  d  S)	Nzsanity.dZdtestwzvoid main() {
}
cwdr   z'D compiler %s can not compile programs.z6Executables created by D compiler %s are not runnable.)ospathjoinopenwrite
subprocessPopenr   get_output_argswait
returncoder   name_stringcall)r   work_direnvironmentsource_nameoutput_nameofilepcr   r   r   sanity_check%   s    ,
zDCompiler.sanity_checkc             C   s   d S)NTr   )r   r   r   r   needs_static_linker3   s    zDCompiler.needs_static_linkerc             C   s   d j  |  j  S)N )r    r   )r   r   r   r   r(   6   s    zDCompiler.name_stringc             C   s   |  j  d  d   S)N)r   )r   r   r   r   get_linker_exelist9   s    zDCompiler.get_linker_exelistc             C   s   d g S)Nz-Er   )r   r   r   r   get_preprocess_only_args<   s    z"DCompiler.get_preprocess_only_argsc             C   s   d g S)Nz-cr   )r   r   r   r   get_compile_only_args?   s    zDCompiler.get_compile_only_argsc             C   s   | d |  j    S)N.)get_depfile_suffix)r   objfiler   r   r   depfile_for_objectB   s    zDCompiler.depfile_for_objectc             C   s   d S)Ndepr   )r   r   r   r   r7   E   s    zDCompiler.get_depfile_suffixc             C   s   d g S)Nz-fPICr   )r   r   r   r   get_pic_argsH   s    zDCompiler.get_pic_argsc             C   s   d g S)Nz-sharedr   )r   r   r   r   get_std_shared_lib_link_argsK   s    z&DCompiler.get_std_shared_lib_link_argsc             C   s   t  t | | | | | |  S)N)r
   r   )r   prefix
shlib_namesuffixr   	soversionis_shared_moduler   r   r   get_soname_argsN   s    zDCompiler.get_soname_argsc             C   s   d g S)Nz	-unittestr   )r   r   r   r   get_unittest_argsR   s    zDCompiler.get_unittest_argsc             C   s   g  S)Nr   )r   	buildtyper   r   r   get_buildtype_linker_argsU   s    z#DCompiler.get_buildtype_linker_argsc             C   s   g  S)Nr   )r   r   r   r   get_std_exe_link_argsX   s    zDCompiler.get_std_exe_link_argsc                s   | r | r g  Sd j    f d d   | D  } | d k rQ | d | 7} n  t |  t |  k  r d t |  t |  } | s | } q | d | } n  d j |  g S)N:c                s%   g  |  ] } t  j j   |   q Sr   )r   r   r    ).0p)	build_dirr   r   
<listcomp>`   s   	 z.DCompiler.build_rpath_args.<locals>.<listcomp> Xz-L-rpath={})r    lenformat)r   rJ   from_dirrpath_pathsbuild_rpathinstall_rpathpathspaddingr   )rJ   r   build_rpath_args[   s    "	zDCompiler.build_rpath_argscompilec             C   s  | d  k r g  } n t  | t  r0 | g } n  | d  k rE g  } n t  | t  s` | g } n  t |   } x= | D]5 } | | j   7} | d k rs | | j   7} qs qs W| d k r | | j j |  j 7} n& | d k r | | j j	 |  j 7} n  | | 7} | S)NlinkrW   )

isinstancestrlistr   get_compile_argsget_link_argscoredataexternal_argsr   external_link_args)r   env
extra_argsdependenciesmodeargsr   r   r   r   _get_compiler_check_argsk   s&    		
z"DCompiler._get_compiler_check_argsNc          	   C   sG   |  j  | | | |  } |  j | | |   } | j d k SWd  QXd  S)Nr   )rf   rW   r'   )r   codera   rb   rc   rd   re   rI   r   r   r   compiles   s    zDCompiler.compilesc             C   s   |  j  d | d | S)Nzint i;
rb   )rh   )r   re   ra   r   r   r   has_multi_arguments   s    zDCompiler.has_multi_argumentsc             C   s   g  } x | D] } | d k r% q n  | j  d  r | | j d  d d   j d  } x% | D] } | j d | j    qa Wq n[ | j  d  r | j d |  q n5 | j  d  s | j  d  r | j d |  q n  | j |  q W| S)	Nz-pthreadz-Wl,,r   z-Lz-lz-L/z-L./)
startswithindexsplitappendstrip)clsre   ZdcargsargZlinkargsZlar   r   r   translate_args_to_nongnu   s"    &z"DCompiler.translate_args_to_nongnu)__name__
__module____qualname__r   r0   r1   r(   r3   r4   r5   r9   r7   r;   r<   rB   rC   rE   rF   rV   rf   rh   ri   classmethodrr   r   r   )r   r   r      s(   r   c               @   s   e  Z 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 S)GnuDCompilerc             C   sp   t  j |  | | |  d |  _ d d g } i | d 6| d g d 6| d d g d 6|  _ d	 d
 d g |  _ d  S)Ngccz-Wallz-Wdeprecated1z-Wextra2z
-Wpedantic3
b_colorout
b_sanitizeb_staticpic)r   r   r   	warn_argsbase_options)r   r   r   r   default_warn_argsr   r   r   r      s    	
zGnuDCompiler.__init__c             C   s(   t  |  j d  r$ t | d  d   Sg  S)Nz>=4.9.0)r   r   r   )r   	colortyper   r   r   get_colorout_args   s    zGnuDCompiler.get_colorout_argsc             C   s   d | g S)Nz-fmake-deps=r   )r   	outtargetoutfiler   r   r   get_dependency_gen_args   s    z$GnuDCompiler.get_dependency_gen_argsc             C   s
   d | g S)Nz-or   )r   targetr   r   r   r%      s    zGnuDCompiler.get_output_argsc             C   s
   d | g S)Nz-or   )r   r   r   r   r   get_linker_output_args   s    z#GnuDCompiler.get_linker_output_argsc             C   s   d | g S)Nz-Ir   )r   r   	is_systemr   r   r   get_include_args   s    zGnuDCompiler.get_include_argsc             C   s   |  j  | S)N)r   )r   levelr   r   r   get_warn_args   s    zGnuDCompiler.get_warn_argsc             C   s   d g S)Nz-Werrorr   )r   r   r   r   get_werror_args   s    zGnuDCompiler.get_werror_argsc             C   s   d | g S)Nz-Lr   )r   dirnamer   r   r   get_linker_search_args   s    z#GnuDCompiler.get_linker_search_argsc             C   s   t  | S)N)r   )r   rD   r   r   r   get_buildtype_args   s    zGnuDCompiler.get_buildtype_argsc             C   s   |  j  | | | | |  S)N)build_unix_rpath_args)r   rJ   rP   rQ   rR   rS   r   r   r   rV      s    zGnuDCompiler.build_rpath_argsc             C   s   d g S)Nz
-funittestr   )r   r   r   r   rC      s    zGnuDCompiler.get_unittest_argsN)rs   rt   ru   r   r   r   r%   r   r   r   r   r   r   rV   rC   r   r   r   r   rw      s   	rw   c               @   s   e  Z 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 d d    Z d S)LLVMDCompilerc             C   s2   t  j |  | | |  d |  _ d d g |  _ d  S)NZllvm
b_coverager|   )r   r   r   r   )r   r   r   r   r   r   r   r      s    	zLLVMDCompiler.__init__c             C   s   | d k r d g Sg  S)Nalwaysz-enable-colorr   )r   r   r   r   r   r      s    zLLVMDCompiler.get_colorout_argsc             C   s   g  S)Nr   )r   r   r   r   r   r   r      s    z%LLVMDCompiler.get_dependency_gen_argsc             C   s
   d | g S)Nz-ofr   )r   r   r   r   r   r%      s    zLLVMDCompiler.get_output_argsc             C   s
   d | g S)Nz-ofr   )r   r   r   r   r   r      s    z$LLVMDCompiler.get_linker_output_argsc             C   s   d | g S)Nz-Ir   )r   r   r   r   r   r   r      s    zLLVMDCompiler.get_include_argsc             C   s-   | d k s | d k r" d d g Sd g Sd  S)Nrz   r{   z-wiz-dwr   )r   r   r   r   r   r      s    
zLLVMDCompiler.get_warn_argsc             C   s   d g S)Nz-wr   )r   r   r   r   r      s    zLLVMDCompiler.get_werror_argsc             C   s   d g S)Nz-covr   )r   r   r   r   get_coverage_args  s    zLLVMDCompiler.get_coverage_argsc             C   s   t  | S)N)r	   )r   rD   r   r   r   r     s    z LLVMDCompiler.get_buildtype_argsc             C   s   d g S)Nz-relocation-model=picr   )r   r   r   r   r;     s    zLLVMDCompiler.get_pic_argsc             C   s   d | g S)Nz-L-Lr   )r   r   r   r   r   r     s    z$LLVMDCompiler.get_linker_search_argsc             C   s   |  j  |  S)N)rr   )rp   re   r   r   r   unix_args_to_native  s    z!LLVMDCompiler.unix_args_to_nativeN)rs   rt   ru   r   r   r   r%   r   r   r   r   r   r   r;   r   rv   r   r   r   r   r   r      s   r   c               @   s   e  Z 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 d d    Z d S)DmdDCompilerc             C   s2   t  j |  | | |  d |  _ d d g |  _ d  S)Ndmdr   r|   )r   r   r   r   )r   r   r   r   r   r   r   r     s    	zDmdDCompiler.__init__c             C   s   | d k r d g Sg  S)Nr   z	-color=onr   )r   r   r   r   r   r     s    zDmdDCompiler.get_colorout_argsc             C   s   g  S)Nr   )r   r   r   r   r   r   r   !  s    z$DmdDCompiler.get_dependency_gen_argsc             C   s   d | g S)Nz-ofr   )r   r   r   r   r   r%   &  s    zDmdDCompiler.get_output_argsc             C   s   d g S)Nz-wr   )r   r   r   r   r   )  s    zDmdDCompiler.get_werror_argsc             C   s   d | g S)Nz-ofr   )r   r   r   r   r   r   ,  s    z#DmdDCompiler.get_linker_output_argsc             C   s   d | g S)Nz-Ir   )r   r   r   r   r   r   r   /  s    zDmdDCompiler.get_include_argsc             C   s   d g S)Nz-wir   )r   r   r   r   r   r   2  s    zDmdDCompiler.get_warn_argsc             C   s   d g S)Nz-covr   )r   r   r   r   r   5  s    zDmdDCompiler.get_coverage_argsc             C   s   d | g S)Nz-L-Lr   )r   r   r   r   r   r   8  s    z#DmdDCompiler.get_linker_search_argsc             C   s   t  | S)N)r   )r   rD   r   r   r   r   >  s    zDmdDCompiler.get_buildtype_argsc             C   s
   d d g S)Nz-sharedz-defaultlib=libphobos2.sor   )r   r   r   r   r<   A  s    z)DmdDCompiler.get_std_shared_lib_link_argsc             C   s   |  j  |  S)N)rr   )rp   re   r   r   r   r   D  s    z DmdDCompiler.unix_args_to_nativeN)rs   rt   ru   r   r   r   r%   r   r   r   r   r   r   r   r<   rv   r   r   r   r   r   r     s   r   )os.pathr   r#   mesonlibr   r   	compilersr   r   r   r	   r
   r   r   r   r   rw   r   r   r   r   r   r   <module>   s   :.6