
    -Phĉ                    |   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 ddl	mZmZmZ ddlmZ d	d
lmZmZmZ d	dl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 ddlm Z  ddl!m"Z" ddl#m$Z$ ddl	m%Z% eZ&ne'Z&ddddddddddddddddZ(de)d <   g g g d!gg d"g d#d$gd%Z*d&e)d'<   g g g d(gd(d)gd(d)gd(gd%Z+d&e)d*<   g d+gd,gd!gd-d.gd/d.gd0gd%Z,d&e)d1<    G d2 d3e&          Z- G d4 d5e          Z. G d6 d7e          Z/ G d8 d9ee/          Z0dBd=Z1 G d> d?e-e/          Z2 G d@ dAe-e/          Z3dS )C    )annotationsN   )mesonlib)CompilerArgs)RSPFileSyntax)EnvironmentExceptionversion_compare
is_windows	OptionKey   )clike_debug_argsCompilerCompileCheckMode)GnuCompiler)gnu_common_warning_args)	compilers)	DFeatures)
Dependency)MachineInfo)Environment)DynamicLinker)MachineChoicez
-funittestz-fdebugz	-fversionz-J)unittestdebugversion
import_dirz	-unittestz-d-debugz
-d-versionz-debugz-version)gccllvmdmdzT.Dict[str, T.Dict[str, str]]d_feature_argsz-O1)-O2-enable-inlining-Hkeep-all-bodies)-O3r#   r$   z-Oz)plain0g123sT.Dict[str, T.List[str]]ldc_optimization_argsz-Oz-inlinedmd_optimization_argsz-O0z-Ogr"   z-finline-functionsr%   z-Osgdc_optimization_argsc                  T    e Zd ZU dZdFdZej        ri Zded<   dGd	Z	d
Z
dHdZdHdZdIdZdJdZdKdZdGdZdGdZdGdZdGdZdGdZdLdZdMd ZdGd!ZdNd#ZdOd%ZdP fd.ZedQd3            ZedRd5            ZedRd6            ZedSdQd8            ZdTd:Z dUd=Z!dV fdDZ"dGdEZ# xZ$S )WDmdLikeCompilerMixinzMixin class for DMD and LDC.

    LDC has a number of DMD like arguments, and this class allows for code
    sharing between them as makes sense.
    dmd_frontend_versionT.Optional[str]c                F    |	d| _         d S t          |d          | _         d S )NFz	>=2.095.0)_dmd_has_depfiler	   )selfr3   s     V/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mesonbuild/compilers/d.py__init__zDmdLikeCompilerMixin.__init__d   s1    '$)D!!! %44H+$V$VD!!!    r-   
mscrt_argsreturnT.List[str]c                    d S N r7   s    r8   _get_target_arch_argsz*DmdLikeCompilerMixin._get_target_arch_argsn   s      r:   -L=
outputnamestrc                    d|z   gS Nz-of=r@   r7   rD   s     r8   get_output_argsz$DmdLikeCompilerMixin.get_output_argsr       #$$r:   c                    d|z   gS rG   r@   rH   s     r8   get_linker_output_argsz+DmdLikeCompilerMixin.get_linker_output_argsu   rJ   r:   path	is_systemboolc                    |dk    rd}d|z   gS )N .-I=r@   )r7   rM   rN   s      r8   get_include_argsz%DmdLikeCompilerMixin.get_include_argsx   s    2::D~r:   parameter_list	build_dirc           
     <   t          |          D ]\  }}|d d         dk    rS|d d         t          j                            t          j                            ||dd                              z   ||<   |d d         dk    rS|d d         t          j                            t          j                            ||dd                              z   ||<   |d d         dk    rS|d d         t          j                            t          j                            ||dd                              z   ||<   |d d         dk    rS|d d         t          j                            t          j                            ||dd                              z   ||<   |S )	N   rS      z-L-L   z-L=-L   z-Wl,-L	enumerateosrM   normpathjoinr7   rU   rV   idxis        r8   &compute_parameters_with_absolute_pathsz;DmdLikeCompilerMixin.compute_parameters_with_absolute_paths}   s~   // 	_ 	_FC!u~~&'ebg.>.>rw||IWXYZY[Y[W\?]?].^.^&^s#!u&'ebg.>.>rw||IWXYZY[Y[W\?]?].^.^&^s#!u&'ebg.>.>rw||IWXYZY[Y[W\?]?].^.^&^s#!u  &'ebg.>.>rw||IWXYZY[Y[W\?]?].^.^&^s#r:   levelc                    dgS )N-wir@   r7   re   s     r8   get_warn_argsz"DmdLikeCompilerMixin.get_warn_args   s	    wr:   c                    dgS )Nz-wr@   rA   s    r8   get_werror_argsz$DmdLikeCompilerMixin.get_werror_args   	    vr:   c                    dgS )Nz-covr@   rA   s    r8   get_coverage_argsz&DmdLikeCompilerMixin.get_coverage_args   s	    xr:   c                    g S r?   r@   rA   s    r8   get_coverage_link_argsz+DmdLikeCompilerMixin.get_coverage_link_args       	r:   c                    dgS )Nz-Er@   rA   s    r8   get_preprocess_only_argsz-DmdLikeCompilerMixin.get_preprocess_only_args   rl   r:   c                    dgS )Nz-cr@   rA   s    r8   get_compile_only_argsz*DmdLikeCompilerMixin.get_compile_only_args   rl   r:   c                    dS Ndepsr@   rA   s    r8   get_depfile_suffixz'DmdLikeCompilerMixin.get_depfile_suffix       vr:   	outtargetoutfilec                     | j         rd| gS g S )Nz
-makedeps=)r6   )r7   r{   r|   s      r8   get_dependency_gen_argsz,DmdLikeCompilerMixin.get_dependency_gen_args   s#      	,***++	r:   c                >    | j                                         rg S dgS Nz-fPICinfor
   rA   s    r8   get_pic_argsz!DmdLikeCompilerMixin.get_pic_args   %    9!! 	Iyr:   optimization_levelc                :    |dk    r|                                  S g S Nr&   rB   r7   r   s     r8   get_optimization_link_argsz/DmdLikeCompilerMixin.get_optimization_link_args   $    ((--///	r:   
implibnamec                6    | j                             |          S r?   )linkerimport_library_args)r7   r   s     r8   gen_import_library_argsz,DmdLikeCompilerMixin.gen_import_library_args   s    {..z:::r:   env'Environment'from_dirrpath_pathsT.Tuple[str, ...]build_rpathinstall_rpath"T.Tuple[T.List[str], T.Set[bytes]]c                   | j                                         rg t                      fS | j        j                            d          rg }t                                          ||||||          \  }}	|D ]h}
d|
v rM|
                    dd          \  }}|	                    |           |	                    | j
        |z              S|	                    |
           i||	fS t                                          ||||||          S )Nld,r   maxsplit)r   r
   setr   id
startswithsuperbuild_rpath_argssplitappendLINKER_PREFIX)r7   r   rV   r   r   r   r   args
rpath_argsrpath_dirs_to_removerab	__class__s                r8   r   z%DmdLikeCompilerMixin.build_rpath_args   s     9!! 	; ;>$$T** 	0 !#D161I1IHk;2W 2W.Z- # #!88773733DAqKKNNNKK 2Q 67777KKNNNN.//ww''Hk;O O 	Or:   r   r   r   link_idc                   g }d}g d}|D ]3}g }|                                 r|                     |          }n)|                                r|                     |          }|r|                    |           p|dk    rw|                    d          r|                    d          r|dk    s|                    d          s|                    d          rd||                    d          d	z   d                              d          }	|	D ],}
|                    d
|
	                                z              -7|                    d          r|                    |           c|                    d          r|                    d
|z              |                    d          rX|                    d          r!|                    d|dd          z              n |                    d|dd          z              |                    d          rX|                    d          r!|                    d|dd          z              n |                    d|dd          z              l|                    d          rX|                    d
          r|dd          }n
|dd          }|r|                    |           d}||v rd}|                    d          s|                    d          r|                    |           |                                 r2|dk    r,|                    d          r|                    |           T|
                    d          s|
                    d           rBt          |          d!k    r/|                    d          s|                    d
|z              |                    d
|z              |                    d          s/|
                    d"          r|                    d
|z              |                    |           5|S )#NF)z-rpathz-rpath-linkz-sonamez-compatibility_versionz-current_versionz-pthreadz-fstack-protectorz-D)z-Ddz-Df-Wl,r   r   rC   )z-link-defaultlibz-linkerz-link-internallyz-linkonce-templatesz-libz-lz-isystemz	-isystem=rS   	   -I   z
-idirafterz-idirafter=   
   -LrX   r   T-@link/.a.libr   )r   r   )r
   translate_arg_to_windows	is_darwin_translate_arg_to_osxextendr   indexr   r   stripendswithlen)clsr   r   r   dcargslink_expect_arglink_flags_with_argargosargslinkargslasuffixs               r8   _translate_args_to_nongnuz.DmdLikeCompilerMixin._translate_args_to_nongnu   s}    !  
 
 
  n	# n	#C"$F   855c::!! 822377 f%%% j  ~~122 ~~d## SD[[CNN><Z<Z[ ~~f%% Z#syy~~122399#>>" 6 6BMM%"((**"45555 rss T# c"""%% L#eck***
++ H# >>+.. 2MM%#abb'/2222MM$QRR.111-- =#>>-00 3MM%#bcc("23333MM$RSS/222%% 6#  >>%(( % WFF WF"  MM#&&&&+O000&*O$$S)) V->->s-C-C MM#&&& ??$$ F):):v?P?PQT?U?U):MM#&&& <<%% !f)=)= !6{{Qv/@/@/E/Eefn555 eck***^^C(( #S\\.-I-I #eck***c""""r:   r   c                   g }|                     d          r||                    d          dz   d                              d          }|D ]I}|                     d          r2|                    d|dd                                          z              Jn|                     d          r|                    |           |dd                                          }| t          u rZ|d	k    r*|                    d
           |                    d           |                     d          r|                    d           |S )Nr   r   r   z--out-implib=z-L=/IMPLIB:   
-mscrtlib=r   libcmtz-L=/NODEFAULTLIB:libcmtz-L=/NODEFAULTLIB:libvcruntimemsvcrtz+-L=/DEFAULTLIB:legacy_stdio_definitions.lib)r   r   r   r   r   lowerLLVMDCompiler)r   r   r   r   r   mscrtlibs         r8   r   z-DmdLikeCompilerMixin.translate_arg_to_windowsK  sL   >>&!! 	O399S>>A-../55c::H A A==11 AKK233 ?@@@A ^^L)) 	OKK233x~~''Hm## x''KK 9:::KK ?@@@ &&x00 OKK MNNNr:   c                d    g }|                     d          r|                    d|z              |S )Nz-install_namerC   )r   r   )r   r   r   s      r8   r   z*DmdLikeCompilerMixin._translate_arg_to_osxe  s6    >>/** 	%KK$$$r:   rQ   c                0    |                      |||          S r?   )r   )r   r   r   r   s       r8   _unix_args_to_nativez)DmdLikeCompilerMixin._unix_args_to_nativel  s    ,,T4AAAr:   is_debugc                \    g }|rt           | j                 d         g}t          |         |z   S )Nr   )r!   r   r   )r7   r   ddebug_argss      r8   get_debug_argsz#DmdLikeCompilerMixin.get_debug_argsp  s3     	=)$'27;<K)K77r:   crt_val	buildtypec                z    | j                                         sg S | j        |                     ||                   S r?   )r   r
   r;   get_crt_valr7   r   r   s      r8   _get_crt_argsz"DmdLikeCompilerMixin._get_crt_argsw  s:    y##%% 	It//CCDDr:   prefix
shlib_namer   	soversiondarwin_versionsT.Tuple[str, str]c                "   t                                          ||||||          }g }| j        j                            d          rS|D ]N}	|	                    dd          \  }
}|                    |
           |                    | j        |z              O|S | j        j                            d          rT|D ]O}	|	                    | j                  s|                    | j        |	z              :|                    |	           P|S |S )Nzld.r   r   r   ld64)r   get_soname_argsr   r   r   r   r   r   )r7   r   r   r   r   r   r   sargssoargsr   r   r   r   s               r8   r   z$DmdLikeCompilerMixin.get_soname_args|  s&    ''VZ(1?D D
 !;>$$U++ 	 6 6yyqy111a   d0145555M[^&&v.. 	 ' '~~d&899 'MM$"4s":;;;;MM#&&&&MLr:   c                    | j                                         }| j                                        rd |D             }|S )Nc                :    g | ]}|                     d d          S )rC   z	-Xcc=-Wl,)replace).0r   s     r8   
<listcomp>zFDmdLikeCompilerMixin.get_allow_undefined_link_args.<locals>.<listcomp>  s&    @@@aAIIe[11@@@r:   )r   get_allow_undefined_argsr   r   r7   r   s     r8   get_allow_undefined_link_argsz2DmdLikeCompilerMixin.get_allow_undefined_link_args  sG    {33559   	A A@4@@@Dr:   )r3   r4   r<   r=   )rD   rE   r<   r=   )rM   rE   rN   rO   r<   r=   rU   r=   rV   rE   r<   r=   re   rE   r<   r=   r<   rE   r{   rE   r|   rE   r<   r=   r   rE   r<   r=   )r   rE   r<   r=   )r   r   rV   rE   r   rE   r   r   r   rE   r   rE   r<   r   )r   r=   r   r   r   rE   r<   r=   )r   rE   r<   r=   )rQ   )r   rO   r<   r=   r   rE   r   rE   r<   r=   )r   r   r   rE   r   rE   r   rE   r   rE   r   r   r<   r=   )%__name__
__module____qualname____doc__r9   TTYPE_CHECKINGr;   __annotations__rB   r   rI   rL   rT   rd   ri   rk   rn   rp   rs   ru   ry   r~   r   r   r   r   classmethodr   r   r   r   r   r   r   r   __classcell__r   s   @r8   r2   r2   \   s         W W W W 	 </1
1111;;;;M% % % %% % % %   
                           
   
   
; ; ; ;O O O O O O4 | | | [||    [2    [ B B B B [B8 8 8 8E E E E
     2	 	 	 	 	 	 	 	r:   r2   c                      e Zd ZdZdZdS )DCompilerArgs)r   r   )r   N)r   r   r   prepend_prefixesdedup2_prefixesr@   r:   r8   r  r    s        #OOOr:   r  c                       e Zd ZdgdgdgdgdgdZdZddd	d
dO fdZdPd ZdQd!ZdRd"ZdSd#Z	dTd'Z
dUd)ZdVdWd-ZdXd0ZdSd1ZdYd4ZdYd5ZdVdZd8Z	 	 	 	 d[d\ fdAZdddBd]dGZdddBd^dIZddd	dJd_dNZ xZS )`	DCompilerr   z-mscrtlib=msvcrtz-mscrtlib=msvcrtdz-mscrtlib=libcmtz-mscrtlib=libcmtd)nonemdmddmtmtddNFr   full_versionis_crossexelistr=   r   rE   for_machiner   r   'MachineInfo'archr   T.Optional['DynamicLinker']r  r4   r  rO   c          
     h    t                                          g |||||||           || _        d S )Nr  )r   r9   r  )
r7   r  r   r  r   r  r   r  r  r   s
            r8   r9   zDCompiler.__init__  sE    
 	Wg{D&2X 	 	G 	G 	G			r:   work_direnvironmentr   r<   Nonec                z   t           j                            |d          }t           j                            |d          }t          |dd          5 }|                    d           d d d            n# 1 swxY w Y   | j        |                     |          z   |                                 z   |gz   }| j        r+|	                                s|| 
                                z  }t          j        ||          }|                                 |j        dk    r$t          d	|                                 z            | j        r4|	                                sd S |j                                        |gz   }n|g}t          j        |          dk    r$t          d
|                                 z            d S )Nzsanity.ddtestwzutf-8)encodingzvoid main() { })cwdr   z&D compiler %s cannot compile programs.z6Executables created by D compiler %s are not runnable.)r^   rM   r`   openwriter  rI   rB   r  has_exe_wrapperru   
subprocessPopenwait
returncoder   name_stringexe_wrapperget_commandcall)	r7   r  r  source_nameoutput_nameofilecompile_cmdlistpccmdlists	            r8   sanity_checkzDCompiler.sanity_check  s   gll8Z88gll8W55+sW555 	/KK-...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ ,)=)=k)J)JJTMgMgMiMiimxlyy = 	<!<!<!>!> 	<t99;;;Oo8<<<
			=A&'ORVRbRbRdRd'deee= 	$..00 !-99;;{mKGG"mG?7##q((&'_bfbrbrbtbt'tuuu )(s   A55A9<A9c                    dS )NTr@   rA   s    r8   needs_static_linkerzDCompiler.needs_static_linker  s    tr:   c                    dS rw   r@   rA   s    r8   ry   zDCompiler.get_depfile_suffix  rz   r:   c                >    | j                                         rg S dgS r   r   rA   s    r8   r   zDCompiler.get_pic_args  r   r:   kwargsr   build_to_srcc                f   g }t           | j                 d         }|s$t          d|                                 z            |d         r|                    |           d}t           | j                 d         }|s$t          d|                                 z            |d         D ]}t          |t                    rt          ||          }(t          |t                    r2|	                                rt          |t          |                    }o|                    | d|            |dk    r|                    | d|            d}t           | j                 d         }	|	s$t          d	|                                 z            |d
         D ]}
t          |
t                    rt          ||
          }(t          |
t                    r2|
	                                rt          |t          |
                    }o|                    |	 d|
            |dk    r|                    |	 d|            t           | j                 d         }|s$t          d|                                 z            |d         D ]}|
                                }|                                D ]}}t          j                            ||          }|dvr|}n|}t          j                            ||          }|                    | |            |                    | |            ~|S )Nr   z6D compiler %s does not support the "unittest" feature.r   z=D compiler %s does not support conditional debug identifiers.=r   r   z?D compiler %s does not support conditional version identifiers.versionsr   zGD compiler %s does not support the "string import directories" feature.import_dirs)rQ   rR   )r!   r   r   r*  r   
isinstanceintmaxrE   isdigit
get_curdirget_incdirsr^   rM   r`   )r7   r9  r:  resunittest_argdebug_level	debug_argr  version_levelversion_argvimport_dir_argidir_objbasediridir
bldtreedirexpdir
srctreedirs                     r8   get_feature_argszDCompiler.get_feature_args  s   %dg.z: 	v&'_bfbrbrbtbt'tuuu* 	%JJ|$$$"47+G4	 	}&'fimiyiyi{i{'{|||  	/ 	/A!S!! /!+q11As## /		 /!+s1vv66

i--!--....!JJ)33k33444$TW-i8 	&'hkok{k{k}k}'}~~~ 
# 	1 	1A!S!! 1 #M1 5 5As## 1		 1 #M3q66 : :

k//A//0000AJJ+7777888'0> 	G&'psw  tD  tD  tF  tF  (F  G  G  G }- 	< 	<H))++G ,,.. 	< 	<W\\'488
y(('FF$FW\\,??


n:j::;;;

n:j::;;;;	< 
r:   r   c                :    |dk    r|                                  S g S r   r   r   s     r8   r   z$DCompiler.get_optimization_link_args  r   r:   r   T.Optional[T.Iterable[str]]r  c                "    t          | |          S r?   )r  r   s     r8   compiler_argszDCompiler.compiler_args#  s    T4(((r:   r   T.Tuple[bool, bool]c                2    |                      d||          S )Nzint i;
)
extra_args)compiles)r7   r   r   s      r8   has_multi_argumentszDCompiler.has_multi_arguments&  s    }}Z}>>>r:   c                    | j                                         r$| j        rd| j         dgS | j        dk    rdgS dgS g S )Nz	-mtriple=z-windows-msvcx86_64-m64-m32)r   r
   r  r  rA   s    r8   rB   zDCompiler._get_target_arch_args)  sZ     9!! 	}  <DI<<<==h&&x8O	r:   r   r   c                    g S r?   r@   r   s      r8   get_crt_compile_argszDCompiler.get_crt_compile_args4  rq   r:   c                    g S r?   r@   r   s      r8   get_crt_link_argszDCompiler.get_crt_link_args7  rq   r:   r[  GT.Union[T.List[str], T.Callable[[CompileCheckMode], T.List[str]], None]c                $   |                                  }|ryt          |          r |t          j                  }t	          |t
                    r|                    |           n*t	          |t                    r|                    |           |S r?   )	rB   callabler   COMPILEr@  listr   rE   r   )r7   r[  r   s      r8   _get_compile_extra_argsz!DCompiler._get_compile_extra_args:  s    ))++ 	(
## B'Z(8(@AA
*d++ (J''''J,, (J'''r:   code'mesonlib.FileOrString'dependencies T.Optional[T.List['Dependency']]run_envT.Optional[T.Dict[str, str]]run_cwdcompilers.RunResultc                z    |                      |          }t                                          ||||||          S r?   )rk  r   run)r7   rl  r   r[  rn  rp  rr  r   s          r8   ru  zDCompiler.runE  s8    
 11*==
ww{{4j,QQQr:   r[  rn  typenamer   GT.Union[None, T.List[str], T.Callable[[CompileCheckMode], T.List[str]]]T.Tuple[int, bool]c                   |g }d| d| d}|                      ||||          }|j        sdS |j        dk    rt          j        d          t          |j                  |j        fS )N-
        import std.stdio : writeln;
        ,
        void main() {
            writeln((z).sizeof);
        }
        rv  )r<  Fr   z!Could not run sizeof test binary.)
cached_runcompiledr)  r   r   rA  stdoutcached)r7   rw  r   r   r[  rn  trF  s           r8   sizeofzDCompiler.sizeofM  s     J	  	   ooa+7  9 9| 	9>Q/0STTT3:
**r:   T.Optional[T.List[str]]c               8   |g }d| d| d}|                      ||||          }|j        st          j        d          |j        dk    rt          j        d          t          |j                  }|dk    rt          j        d| d	          ||j        fS )
Nr{  r|  z).alignof);
        }
        rv  z!Could not compile alignment test.r   z$Could not run alignment test binary.z!Could not determine alignment of z&. Sorry. You might want to file a bug.)ru  r~  r   r   r)  rA  r  r  )	r7   rw  r   r   r[  rn  r  rF  aligns	            r8   	alignmentzDCompiler.alignmenta  s     J	  	   hhq#*$0  2 2| 	U/0STTT>Q/0VWWWCJA::/  1ET\  1E  1E  1E  F  F  Fcj  r:   )r[  rn  disable_cachehnameIT.Union[None, T.List[str], T.Callable[['CompileCheckMode'], T.List[str]]]r  c                   |                      |          }| d| d}|                     ||||t          j        |          S )Nz
        import z
;
        )r[  rn  moder  )rk  r\  r   ri  )r7   r  r   r   r[  rn  r  rl  s           r8   
has_headerzDCompiler.has_headerx  sj    
 11*==
     }}T3:*6=M=Uer  t t 	tr:   r  r=   r   rE   r  r   r   r  r  rE   r   r  r  r4   r  rO   )r  rE   r  r   r<   r  r<   rO   r   r   )r9  r   r:  rE   r<   r=   r   r?   )r   rV  r<   r  )r   r=   r   r   r<   rY  r   )r[  rf  r<   r=   )NNNN)rl  rm  r   r   r[  rf  rn  ro  rp  rq  rr  r4   r<   rs  )rw  rE   r   rE   r   r   r[  rx  rn  ro  r<   ry  )rw  rE   r   rE   r   r   r[  r  rn  ro  r<   ry  )r  rE   r   rE   r   r   r[  r  rn  ro  r  rO   r<   rY  )r   r   r   r;   languager9   r4  r6  ry   r   rT  r   rX  r]  rB   rc  re  rk  ru  r  r  r  r  r  s   @r8   r  r    s>       !"#$!"#$ J H 8<15"'	       v v v v6         
< < < <|   
) ) ) ) )? ? ? ?	 	 	 	      	 	 	 	 	 cg=A48'+	R R R R R R R fj@D+ + + + + +* 9=CG! ! ! ! ! !0 lpDH).
t 
t 
t 
t 
t 
t 
t 
t 
t 
tr:   r  c                       e Zd Zej        ZdZddddd(dZd) fdZd* fdZd+dZ	d,dZ
d-d!Zd.d"Zd. fd#Zd/d'Z xZS )0GnuDCompilerr   NFr  r  r=   r   rE   r  r   r   r  r  r   r  r  r4   r  rO   c               t   t                               | ||||||||	  	         t          j        | i            ddg}	g |	|	dgz   |	ddgz   |	ddgz   |                     t                    z   d| _        d dD             | _        t          | j        d	          | _	        t          | j        d
          | _
        d S )Nr  z-Wallz-Wdeprecatedz-Wextraz
-Wpedantic)r'   r)   r*   r+   
everythingc                ,    h | ]}t          |          S r@   r   r   os     r8   	<setcomp>z(GnuDCompiler.__init__.<locals>.<setcomp>  s+     1 1 1IaLL1 1 1r:   )
b_colorout
b_sanitizeb_staticpicb_vscrt
b_coverageb_pgob_ndebugz>=4.9z>=7.1)r  r9   r   supported_warn_argsr   	warn_argsbase_optionsr	   r   _has_color_support_has_deps_support)
r7   r  r   r  r   r  r   r  r  default_warn_argss
             r8   r9   zGnuDCompiler.__init__  s    
 	4';d"((4x 	 	I 	I 	I 	T2&&&$n5!00I;>0I|3LL):i=V)V)-)A)ABY)Z)Z*[	] ]1 1#01 1 1
 #2$,"H"H "1w!G!Gr:   	colortyper<   c                X    | j         r!t                                          |           g S r?   )r  r   get_colorout_args)r7   r  r   s     r8   r  zGnuDCompiler.get_colorout_args  s+    " 	1GG%%i000	r:   r{   r|   c                Z    | j         r"t                                          ||          S g S r?   )r  r   r~   )r7   r{   r|   r   s      r8   r~   z$GnuDCompiler.get_dependency_gen_args  s.    ! 	G77229gFFF	r:   re   c                    | j         |         S r?   )r  rh   s     r8   ri   zGnuDCompiler.get_warn_args  s    ~e$$r:   r   c                    t           |         S r?   )r0   r   s     r8   get_optimization_argsz"GnuDCompiler.get_optimization_args  s    $%788r:   rU   rV   c           
        t          |          D ]t\  }}|d d         dk    s|d d         dk    rS|d d         t          j                            t          j                            ||dd                              z   ||<   u|S )Nr   r   r   r\   ra   s        r8   rd   z3GnuDCompiler.compute_parameters_with_absolute_paths  s    // 	_ 	_FC!u}}"1"&'ebg.>.>rw||IWXYZY[Y[W\?]?].^.^&^s#r:   c                4    | j                                         S r?   )r   r   rA   s    r8   r   z*GnuDCompiler.get_allow_undefined_link_args  s    {33555r:   c                    t                                                      }| j                                        r|S |dgz   S )Nz-shared-libphobosr   get_linker_always_argsr   r
   r7   r   r   s     r8   r  z#GnuDCompiler.get_linker_always_args  sB    ww--//9!! 	K*+++r:   disabler   r   c                    |rdgS g S )Nz	-freleaser@   r7   r  r   s      r8   get_assert_argszGnuDCompiler.get_assert_args       	!= 	r:   r  r  rE   r<   r=   r   r   r   r   r   r  rO   r   r   r<   r=   )r   r   r   r   r   r   r9   r  r~   ri   r  rd   r   r  r  r  r  s   @r8   r  r    s         -M	B 8<15"'	H H H H H H6     
     
% % % %9 9 9 9   6 6 6 6, , , , , ,       r:   r  version_outputr4   r<   c                f    | d S t          j        d|           }|r|                    d          S d S )NzDMD v(\d+\.\d+\.\d+)r   )researchgroup)r  version_regexs     r8   find_ldc_dmd_frontend_versionr    s@    tI5~FFM &""1%%%4r:   c                       e Zd ZdZdddddd+dZd,dZd-dZd.dZd/dZd0d Z	d1d"Z
ed2d#            Zd. fd$Zd3d(Zd4d*Z xZS )5r   r   NF)r   r  r  r  r  r=   r   rE   r  r   r   r  r  r   r  r  r4   r  rO   r  c                   t                               | ||||||||	  	         t                              | t          |	                     d dD             | _        d S )Nr  )r3   c                ,    h | ]}t          |          S r@   r   r  s     r8   r  z)LLVMDCompiler.__init__.<locals>.<setcomp>      gggaYq\\gggr:   r  r  r  r  )r  r9   r2   r  r  )
r7   r  r   r  r   r  r   r  r  r  s
             r8   r9   zLLVMDCompiler.__init__  sz    
 	4';d"((4x 	 	I 	I 	I 	%%dA^_mAnAn%ooogg3fgggr:   r  r<   c                    |dk    rdgS g S )Nalwaysz-enable-colorr@   r7   r  s     r8   r  zLLVMDCompiler.get_colorout_args  s      #$$	r:   re   c                (    |dv rddgS |dk    rdgS g S )N>   r*   r+   rg   z-dwr)   r@   rh   s     r8   ri   zLLVMDCompiler.get_warn_args  s,    J5>!c\\7N	r:   c                    dgS )Nz-relocation-model=picr@   rA   s    r8   r   zLLVMDCompiler.get_pic_args  s    '((r:   r   r   c                .    |                      ||          S r?   r   r   s      r8   re  zLLVMDCompiler.get_crt_link_args      !!'9555r:   r   c                N    |                      || j        | j        j                  S r?   r   r   r   r   r   s     r8   unix_args_to_nativez!LLVMDCompiler.unix_args_to_native       ((ty$+.IIIr:   r   c                l    |dk    r"|                                  t          |         z   S t          |         S r   )rB   r.   r   s     r8   r  z#LLVMDCompiler.get_optimization_args  7    ((--//2GHZ2[[[$%788r:   c                    d| gS )Nz-linker=r@   )r   r   r   s      r8   use_linker_argszLLVMDCompiler.use_linker_args  s    #6##$$r:   c                    t                                                      }| j                                        r|S |dgz   S )Nz-link-defaultlib-sharedr  r  s     r8   r  z$LLVMDCompiler.get_linker_always_args  sB    ww--//9!! 	K0111r:   r  r   r   c                    |rdgS g S )Nz	--releaser@   r  s      r8   r  zLLVMDCompiler.get_assert_args  r  r:   r   c                N    t                      rt          j        nt          j        S r?   )r
   r   MSVCGCCrA   s    r8   rsp_file_syntaxzLLVMDCompiler.rsp_file_syntax  s     &0\\H}!!}7HHr:   )r  r=   r   rE   r  r   r   r  r  rE   r   r  r  r4   r  rO   r  r4   r  r   r   r   r   r=   r<   r=   r   )r   rE   r   rE   r<   r=   r  r<   r   )r   r   r   r   r9   r  ri   r   re  r  r  r  r  r  r  r  r  r  s   @r8   r   r     s?       	B 8<15"'4		h 	h 	h 	h 	h 	h   
   ) ) ) )6 6 6 6J J J J9 9 9 9
 % % % [%2 2 2 2 2 2   
I I I I I I I Ir:   r   c                       e Zd ZdZddddd*dZd+dZd,dZd,dZd,dZd-dZ	d.dZ
d/d!Zd0d"Zd, fd#Zd1d'Zd2d)Z xZS )3DmdDCompilerr    NFr  r  r=   r   rE   r  r   r   r  r  r   r  r  r4   r  rO   c                   t                               | ||||||||	  	         t                              | |           d dD             | _        d S )Nr  c                ,    h | ]}t          |          S r@   r   r  s     r8   r  z(DmdDCompiler.__init__.<locals>.<setcomp>%  r  r:   r  )r  r9   r2   r  )	r7   r  r   r  r   r  r   r  r  s	            r8   r9   zDmdDCompiler.__init__  sm    
 	4';d"((4x 	 	I 	I 	I 	%%dG444gg3fgggr:   r  r<   c                    |dk    rdgS g S )Nr  z	-color=onr@   r  s     r8   r  zDmdDCompiler.get_colorout_args'  s      = 	r:   c                v    | j                                         r| j        dk    rdgS | j        dk    rdgS dgS g S )Nr_  phobos64.lib
x86_mscoffphobos32mscoff.lib
phobos.libr   r
   r  rA   s    r8   get_std_exe_link_argsz"DmdDCompiler.get_std_exe_link_args,  sS    9!! 	" yH$$&''l**,-- >!	r:   c                    d}| j                                         r| j        dk    rd}n| j        dk    rd}nd}dd|z   gS )	Nzlibphobos2.sor_  r  r  r  r  z-sharedz-defaultlib=r  )r7   libnames     r8   get_std_shared_lib_link_argsz)DmdDCompiler.get_std_shared_lib_link_args7  sZ    !9!! 	'yH$$(l**.&>G344r:   c                v    | j                                         r| j        dk    rdgS | j        dk    rdgS dgS g S )Nr_  r`  r  z
-m32mscoffra  r  rA   s    r8   rB   z"DmdDCompiler._get_target_arch_argsB  sO     9!! 	yH$$xl**$~%8O	r:   r   r   c                .    |                      ||          S r?   r  r   s      r8   rc  z!DmdDCompiler.get_crt_compile_argsN  r  r:   r   c                N    |                      || j        | j        j                  S r?   r  r   s     r8   r  z DmdDCompiler.unix_args_to_nativeQ  r  r:   r   c                l    |dk    r"|                                  t          |         z   S t          |         S r   )rB   r/   r   s     r8   r  z"DmdDCompiler.get_optimization_argsT  r  r:   c                    dS )NFr@   rA   s    r8   can_linker_accept_rspz"DmdDCompiler.can_linker_accept_rspY  s    ur:   c                    t                                                      }| j                                        r|S |ddgz   S )Nz-defaultlib=phobos2z-debuglib=phobos2r  r  s     r8   r  z#DmdDCompiler.get_linker_always_args\  sE    ww--//9!! 	K,.ABBBr:   r  r   r   c                    |rdgS g S )Nz-releaser@   r  s      r8   r  zDmdDCompiler.get_assert_argsb  s     	 <	r:   r   c                    t           j        S r?   )r   r  rA   s    r8   r  zDmdDCompiler.rsp_file_syntaxg  s    !!r:   r  r  r   r   r  r   r  r  r  )r   r   r   r   r9   r  r  r  rB   rc  r  r  r  r  r  r  r  r  s   @r8   r  r    sC       	B 8<15"'		h 	h 	h 	h 	h 	h   
	 	 	 		5 	5 	5 	5
 
 
 
6 6 6 6J J J J9 9 9 9
   C C C C C C   
" " " " " " " "r:   r  )r  r4   r<   r4   )4
__future__r   os.pathr^   r  r&  typingr   rQ   r   arglistr   linkersr   r   r	   r
   optionsr   r   r   r   r   
mixins.gnur   r   r  buildr   rn  r   	envconfigr   r  r   linkers.linkersr   r   CompilerMixinBaseobjectr!   r  r.   r/   r0   r2   r  r  r  r  r   r  r@   r:   r8   <module>r     sL   # " " " " " "  				               " " " " " " # # # # # #                         
 $ # # # # # / / / / / /? !!!!!!))))))''''''))))))//////((((((  !	   	   	 1 1    , 		
	9	9	9	9	9	9
3 3      		

		
		
3 3      



%	&
%	&
3 3     B B B B B, B B BJ
    L   
\t \t \t \t \t \t \t \t|E E E E E;	 E E EZ   <I <I <I <I <I() <I <I <I~P" P" P" P" P"' P" P" P" P" P"r:   