
    <h                    p   % S SK Jr  S SKrS SKrS SKrS SKrSSKJ	r	  SSK
Jr  SSKJr  SSK	JrJrJr  SSKJr  S	S
KJrJrJr  S	SKJr  S	SKJr  \R4                  (       a/  S	SKJr  SSKJrJr  SSKJr  SSK J!r!  SSK"J#r#  SSK$J%r%  SSK	J&r&  \r'O\(r'SSSSS.SSSSS.SSSSS.S.r)S\*S '   / / / S!// S"Q/ S#QS$/S%.r+S&\*S''   / / / S(/S(S)/S(S)/S(/S%.r,S&\*S*'   / S+/S,/S!/S-S./S/S./S0/S%.r-S&\*S1'    " S2 S3\'5      r. " S4 S5\5      r/ " S6 S7\5      r0 " S8 S9\\05      r1S?S: jr2 " S; S<\.\05      r3 " S= S>\.\05      r4g)@    )annotationsN   )mesonlib)CompilerArgs)RSPFileSyntax)EnvironmentExceptionversion_compare
is_windows)	OptionKey   )clike_debug_argsCompilerCompileCheckMode)GnuCompiler)gnu_common_warning_args)	compilers)BuildTarget	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                    ^  \ rS rSr% SrS!S jr\R                  (       a  0 rS\	S'   S"S jr
SrS#S jrS#S	 jrS$S
 jr    S%S jrS&S jrS"S jrS"S jrS"S jrS"S jrS"S jrS'S jrS(S jrS"S jrS)S jrS*S jr S+     S,U 4S jjjr\S-S j5       r\S.S j5       r\S.S j5       r\S/S-S jj5       r S0S jr!S1S jr"        S2U 4S jjr#S"S jr$S r%U =r&$ )3DmdLikeCompilerMixin\   zMixin 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.
c                <    Uc  SU l         g [        US5      U l         g )NFz	>=2.095.0)_dmd_has_depfiler	   )selfdmd_frontend_versions     w/mnt/mint/home/seanl/mnt/public/Repos/ladybird/Build/vcpkg/downloads/tools/meson-1.9.0-d1fcc2/mesonbuild/compilers/d.py__init__DmdLikeCompilerMixin.__init__d   s"    '$)D! %44H+$VD!    r-   
mscrt_argsc                    g N r6   s    r8   _get_target_arch_args*DmdLikeCompilerMixin._get_target_arch_argsn   s    r;   -L=c                    SU-   /$ Nz-of=r?   r6   
outputnames     r8   get_output_args$DmdLikeCompilerMixin.get_output_argsr       #$$r;   c                    SU-   /$ rE   r?   rF   s     r8   get_linker_output_args+DmdLikeCompilerMixin.get_linker_output_argsu   rJ   r;   c                    US:X  a  SnSU-   /$ )N .-I=r?   )r6   path	is_systems      r8   get_include_args%DmdLikeCompilerMixin.get_include_argsx   s    2:D~r;   c           
        [        U5       GHI  u  p4US S S:X  aG  US S [        R                  R                  [        R                  R	                  X$SS  5      5      -   X'   US S S:X  aG  US S [        R                  R                  [        R                  R	                  X$SS  5      5      -   X'   US S S:X  aG  US S [        R                  R                  [        R                  R	                  X$SS  5      5      -   X'   US S S:X  d  GM  US S [        R                  R                  [        R                  R	                  X$SS  5      5      -   X'   GML     U$ )	N   rQ      z-L-L   z-L=-L   z-Wl,-L	enumerateosrR   normpathjoinr6   parameter_list	build_diridxis        r8   &compute_parameters_with_absolute_paths;DmdLikeCompilerMixin.compute_parameters_with_absolute_paths}   s1   /FC!u~&'ebgg.>.>rww||IYZY[W\?].^&^#!u&'ebgg.>.>rww||IYZY[W\?].^&^#!u&'ebgg.>.>rww||IYZY[W\?].^&^#!u &'ebgg.>.>rww||IYZY[W\?].^&^# 0 r;   c                    S/$ )N-wir?   r6   levels     r8   get_warn_args"DmdLikeCompilerMixin.get_warn_args   s	    wr;   c                    S/$ )Nz-wr?   r@   s    r8   get_werror_args$DmdLikeCompilerMixin.get_werror_args   	    vr;   c                    S/$ )Nz-covr?   r@   s    r8   get_coverage_args&DmdLikeCompilerMixin.get_coverage_args   s	    xr;   c                    / $ r>   r?   r@   s    r8   get_coverage_link_args+DmdLikeCompilerMixin.get_coverage_link_args       	r;   c                    S/$ )Nz-Er?   r@   s    r8   get_preprocess_only_args-DmdLikeCompilerMixin.get_preprocess_only_args   rp   r;   c                    S/$ )Nz-cr?   r@   s    r8   get_compile_only_args*DmdLikeCompilerMixin.get_compile_only_args   rp   r;   c                    gNdepsr?   r@   s    r8   get_depfile_suffix'DmdLikeCompilerMixin.get_depfile_suffix       r;   c                4    U R                   (       a  SU 3/$ / $ )Nz
-makedeps=r5   )r6   	outtargetoutfiles      r8   get_dependency_gen_args,DmdLikeCompilerMixin.get_dependency_gen_args   s        	*++	r;   c                J    U R                   R                  5       (       a  / $ S/$ Nz-fPICinfor
   r@   s    r8   get_pic_args!DmdLikeCompilerMixin.get_pic_args   "    99!!Iyr;   c                2    US:w  a  U R                  5       $ / $ Nr&   rA   r6   optimization_levels     r8   get_optimization_link_args/DmdLikeCompilerMixin.get_optimization_link_args       (--//	r;   c                8    U R                   R                  U5      $ r>   )linkerimport_library_args)r6   
implibnames     r8   gen_import_library_args,DmdLikeCompilerMixin.gen_import_library_args   s    {{..z::r;   c                  > U R                   R                  5       (       a  / [        5       4$ U R                  R                  R                  S5      (       az  / n[        TU ]  XX45      u  pxU H]  n	SU	;   aC  U	R                  SSS9u  pUR                  U
5        UR                  U R                  U-   5        ML  UR                  U	5        M_     Xh4$ [        TU ]  XX45      $ )Nld,r   maxsplit)r   r
   setr   id
startswithsuperbuild_rpath_argssplitappendLINKER_PREFIX)r6   envrb   from_dirtargetextra_pathsargs
rpath_argsrpath_dirs_to_removerab	__class__s               r8   r   %DmdLikeCompilerMixin.build_rpath_args   s    99!!; ;;>>$$T** !#D161IH26.Z!877373DAKKNKK 2 2Q 67KKN   //w'H. 	.r;   c                   / nSn/ SQnU GH  n/ nUR                  5       (       a  U R                  U5      nO&UR                  5       (       a  U R                  U5      nU(       a  UR	                  U5        Mm  US:X  a  Mu  UR                  S5      (       a  M  UR                  S5      (       a  US:X  d  UR                  S5      (       d  M  UR                  S5      (       aS  XwR                  S5      S	-   S  R                  S5      n	U	 H%  n
UR                  S
U
R                  5       -   5        M'     GM*  UR                  S5      (       a  UR                  U5        GMT  UR                  S5      (       a  UR                  S
U-   5        GM  UR                  S5      (       aH  UR                  S5      (       a  UR                  SUSS  -   5        OUR                  SUSS  -   5        GM  UR                  S5      (       aH  UR                  S5      (       a  UR                  SUSS  -   5        OUR                  SUSS  -   5        GM=  UR                  S5      (       GaI  UR                  S
5      (       a  USS  nOUSS  nU(       a  UR                  U5        SnGM  X;   a  SnUR                  S5      (       d  UR                  S5      (       a  UR                  U5        GM  UR                  5       (       a0  US:X  a*  UR                  S5      (       a  UR                  U5        GM  UR                  S5      (       d  UR                  S 5      (       a<  [        U5      S!:  a-  UR                  S5      (       d  UR                  S
U-   5        GM  UR                  S
U-   5        GM  UR                  S5      (       d-  UR                  S"5      (       a  UR                  S
U-   5        GM  UR                  U5        GM     U$ )#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=rQ   	   -I   z
-idirafterz-idirafter=   
   -LrW   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   link_iddcargslink_expect_arglink_flags_with_argargosargslinkargslasuffixs               r8   _translate_args_to_nongnu.DmdLikeCompilerMixin._translate_args_to_nongnu   sX    !  
 C"$F  55c:!!2237f% j ~~122~~d##SD[CNN><Z<Z ~~f%%yy~12399#>"BMM%"((*"45 # rss c"%%eck*
++ >>+..MM%#ab'/2MM$QR.1-->>-00MM%#bc("23MM$RS/2%%  >>%(( WF WF" MM#&&+O0&*O$$S))V->->s-C-CMM#& ??$$F):v?P?PQT?U?UMM#& <<%%f)=)=6{Qv/@/@/E/Eefn5 eck*^^C((S\\.-I-Ieck*c"] ` r;   c                4   / nUR                  S5      (       am  XR                  S5      S-   S  R                  S5      nU H@  nUR                  S5      (       d  M  UR                  SUSS  R	                  5       -   5        MB     U$ UR                  S5      (       a|  UR                  U5        USS  R                  5       nU [        L aO  US	:w  a"  UR                  S
5        UR                  S5        UR                  S5      (       a  UR                  S5        U$ )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   -DmdLikeCompilerMixin.translate_arg_to_windowsJ  s    >>&!!99S>A-./55c:H==11KK23 ?@ $  ^^L))KK23x~~'Hm# x'KK 9:KK ?@ &&x00KK MNr;   c                ^    / nUR                  S5      (       a  UR                  SU-   5        U$ )Nz-install_namerC   )r   r   )r   r   r   s      r8   r   *DmdLikeCompilerMixin._translate_arg_to_osxd  s+    >>/**KK$r;   c                &    U R                  XU5      $ r>   )r   )r   r   r   r   s       r8   _unix_args_to_native)DmdLikeCompilerMixin._unix_args_to_nativek  s    ,,TAAr;   c                Z    / nU(       a  [         U R                     S   /n[        U   U-   $ )Nr   )r!   r   r   )r6   is_debugddebug_argss      r8   get_debug_args#DmdLikeCompilerMixin.get_debug_argso  s0    )$''27;<K)K77r;   c                    U R                   R                  5       (       d  / $ U R                  U R                  X5         $ r>   )r   r
   r<   get_crt_valr6   crt_val	buildtypes      r8   _get_crt_args"DmdLikeCompilerMixin._get_crt_argsv  s4    yy##%%It//CDDr;   c                &  > [         TU ]  XX4XV5      n/ nU R                  R                  R	                  S5      (       aL  U HD  n	U	R                  SSS9u  pUR                  U
5        UR                  U R                  U-   5        MF     U$ U R                  R                  R	                  S5      (       a\  U HT  n	U	R	                  U R                  5      (       d   UR                  U R                  U	-   5        MC  UR                  U	5        MV     U$ U$ )Nzld.r   r   r   ld64)r   get_soname_argsr   r   r   r   r   r   )r6   r   prefix
shlib_namer   	soversiondarwin_versionssargssoargsr   r   r   r   s               r8   r   $DmdLikeCompilerMixin.get_soname_args{  s     'Z(1D
 !;;>>$$U++yyqy1a d00145  M[[^^&&v..~~d&8&899MM$"4"4s":;MM#&	 
 MLr;   c                    U R                   R                  5       nU R                  R                  5       (       a!  U Vs/ s H  o"R	                  SS5      PM     nnU$ s  snf )NrC   z	-Xcc=-Wl,)r   get_allow_undefined_argsr   r   replace)r6   r   r   s      r8   get_allow_undefined_link_args2DmdLikeCompilerMixin.get_allow_undefined_link_args  sR    {{33599   <@@4aIIe[14D@ As   Ar   )r7   T.Optional[str]returnT.List[str])rG   strr  r  )rR   r  rS   boolr  r  ra   r  rb   r  r  r  rj   r  r  r  r  r  r   r  r   r  r  r  r   r  r  r  )r   r  r  r  r>   )r   r   rb   r  r   r  r   r   r   T.Optional[T.List[str]]r  z"T.Tuple[T.List[str], T.Set[bytes]])r   r  r   r   r   r  r  r  )r   r  r  r  )rO   )r   r  r  r  r   r  r   r  r  r  )r   'Environment'r   r  r   r  r   r  r   r  r   zT.Tuple[str, str]r  r  )'__name__
__module____qualname____firstlineno____doc__r9   TTYPE_CHECKINGr<   __annotations__rA   r   rH   rL   rT   re   rk   rn   rr   ru   ry   r|   r   r   r   r   r   r   classmethodr   r   r   r   r   r   r   r  __static_attributes____classcell__r   s   @r8   r2   r2   \   sA   W 	/1
,1;M%%
:=BM


; VZ.!,.;R. _A. .2 | ||  2   B B8E
 #03):?J2	 	r;   r2   c                      \ rS rSrSrSrSrg)DCompilerArgsi  )r   r   )r   r?   N)r  r  r  r  prepend_prefixesdedup2_prefixesr  r?   r;   r8   r  r    s    #Or;   r  c                  v  ^  \ rS rSrS/S/S/S/S/S.rSrS	S	S
S.         S U 4S jjjrS!S jrS"S jrS#S jr	S$S jr
S%S jrS&S jrS'S(S jjrS)S jrS$S jrS*S jrS*S jrS'S+S jjr    S,         S-U 4S jjjrS	S	S.     S.S jjrS	S	S.     S/S jjrS	S	S
S.       S0S jjrSrU =r$ )1	DCompileri  r   z-mscrtlib=msvcrtz-mscrtlib=msvcrtdz-mscrtlib=libcmtz-mscrtlib=libcmtd)nonemdmddmtmtddNFr   full_versionis_crossc               4   > [         T	U ]  / XX4UXxS9  XPl        g )Nr)  )r   r9   arch)
r6   exelistr   for_machiner   r-  r   r*  r+  r   s
            r8   r9   DCompiler.__init__  s(    
 	W{&2 	 	G	r;   c                   [         R                  R                  US5      n[         R                  R                  US5      n[        USSS9 nUR	                  S5        S S S 5        U R
                  U R                  U5      -   U R                  5       -   U/-   nU R                  (       a'  UR                  5       (       d  X`R                  5       -  n[        R                  " XaS9nUR                  5         UR                  S:w  a  [        S	U R!                  5       -  5      eU R#                  X$/U5      u  pg ! , (       d  f       N= f)
Nzsanity.ddtestwzutf-8)encodingzvoid main() { })cwdr   z&D compiler %s cannot compile programs.)r]   rR   r_   openwriter.  rH   rA   r+  has_exe_wrapperr|   
subprocessPopenwait
returncoder   name_stringrun_sanity_check)
r6   work_direnvironmentsource_nameoutput_nameofilecompile_cmdlistpcstdostdes
             r8   sanity_checkDCompiler.sanity_check  s   ggll8Z8ggll8W5+sW5KK-. 6 ,,)=)=k)JJTMgMgMiimxlyy ==!<!<!>!>99;;Oo<
	==A&'ORVRbRbRd'dee**;xP
d 65s   D77
Ec                    g)NTr?   r@   s    r8   needs_static_linkerDCompiler.needs_static_linker  s    r;   c                    gr   r?   r@   s    r8   r   DCompiler.get_depfile_suffix  r   r;   c                J    U R                   R                  5       (       a  / $ S/$ r   r   r@   s    r8   r   DCompiler.get_pic_args  r   r;   c                   / n[         U R                     S   nU(       d  [        SU R                  5       -  5      eUS   (       a  UR	                  U5        Sn[         U R                     S   nU(       d  [        SU R                  5       -  5      eUS    H|  n[        U[        5      (       a  [        XW5      nM%  [        U[        5      (       a,  UR                  5       (       a  [        U[        U5      5      nMf  UR	                  U SU 35        M~     US:  a  UR	                  U SU 35        Sn[         U R                     S   n	U	(       d  [        S	U R                  5       -  5      eUS
    H|  n
[        U
[        5      (       a  [        X5      nM%  [        U
[        5      (       a,  U
R                  5       (       a  [        U[        U
5      5      nMf  UR	                  U	 SU
 35        M~     US:  a  UR	                  U	 SU 35        [         U R                     S   nU(       d  [        SU R                  5       -  5      eUS    H  nUR                  5       nUR                  5        Hw  n[        R                  R                  X5      nUS;  a  UnOUn[        R                  R                  UU5      nUR	                  U U 35        UR	                  U U 35        My     M     U$ )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)rO   rP   )r!   r   r   r=  r   
isinstanceintmaxr  isdigit
get_curdirget_incdirsr]   rR   r_   )r6   kwargsbuild_to_src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_argsDCompiler.get_feature_args  s   %dgg.z:&'_bfbrbrbt'tuu*JJ|$"477+G4	&'fimiyiyi{'{|| A!S!!!+1As##		!+s1v6

i[!-. ! !JJ)Ak]34$TWW-i8&'hkok{k{k}'}~~ 
#A!S!! #M 5As##		 #M3q6 :

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

n-j\:;

n-j\:; / . 
r;   c                2    US:w  a  U R                  5       $ / $ r   r   r   s     r8   r   $DCompiler.get_optimization_link_args  r   r;   c                    [        X5      $ r>   )r  r6   r   s     r8   compiler_argsDCompiler.compiler_args  s    T((r;   c                "    U R                  SX!S9$ )Nzint i;
)
extra_args)compiles)r6   r   r   s      r8   has_multi_argumentsDCompiler.has_multi_arguments  s    }}Z}>>r;   c                    U R                   R                  5       (       a8  U R                  (       a  SU R                   S3/$ U R                  S:X  a  S/$ S/$ / $ )Nz	-mtriple=z-windows-msvcx86_64-m64-m32)r   r
   r+  r-  r@   s    r8   rA   DCompiler._get_target_arch_args   sS     99!!}}#DII;m<==h&x8O	r;   c                    / $ r>   r?   r   s      r8   get_crt_compile_argsDCompiler.get_crt_compile_args+  rw   r;   c                    / $ r>   r?   r   s      r8   get_crt_link_argsDCompiler.get_crt_link_args.  rw   r;   c                   U R                  5       nU(       at  [        U5      (       a  U" [        R                  5      n[	        U[
        5      (       a  UR                  U5        U$ [	        U[        5      (       a  UR                  U5        U$ r>   )	rA   callabler   COMPILErV  listr   r  r   )r6   ru  r   s      r8   _get_compile_extra_args!DCompiler._get_compile_extra_args1  so    ))+
##'(8(@(@A
*d++J'  J,,J'r;   c                H   > U R                  U5      n[        TU ]	  XX4XV5      $ r>   )r  r   run)r6   coder   ru  dependenciesrun_envrun_cwdr   s          r8   r  DCompiler.run<  s(    
 11*=
w{4jQQr;   ru  r  c                   Uc  / nSU SU S3nU R                  XcUUS9nUR                  (       d  gUR                  S:w  a  [        R                  " S5      e[        UR                  5      UR                  4$ )N-
        import std.stdio : writeln;
        ,
        void main() {
            writeln((z).sizeof);
        }
        r  )rR  Fr   z!Could not run sizeof test binary.)
cached_runcompiledr<  r   r   rW  stdoutcached)r6   typenamer   r   ru  r  tr^  s           r8   sizeofDCompiler.sizeofD  s     J		 Z  		 ooa+7  9||>>Q//0STT3::

**r;   c               ^   Uc  / nSU SU S3nU R                  XcUUS9nUR                  (       d  [        R                  " S5      eUR                  S:w  a  [        R                  " S5      e[        UR                  5      nUS:X  a  [        R                  " SU S	35      eXR                  4$ )
Nr  r  z).alignof);
        }
        r  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.)r  r  r   r   r<  rW  r  r  )	r6   r  r   r   ru  r  r  r^  aligns	            r8   	alignmentDCompiler.alignmentX  s     J		 Z  		 hhq*$0  2||//0STT>>Q//0VWWCJJA://2ST\S]  ^D  1E  F  Fjj  r;   )ru  r  disable_cachec          	     v    U R                  U5      nU SU S3nU R                  XsUU[        R                  US9$ )Nz
        import z
;
        )ru  r  moder  )r  rv  r   r  )r6   hnamer   r   ru  r  r  r  s           r8   
has_headerDCompiler.has_headero  s\    
 11*=
8 w 	 }}T:*6=M=U=Uer  t 	tr;   )r-  r.  r  r   r  r/  r   r   'MachineInfo'r-  r  r   T.Optional['DynamicLinker']r*  r  r+  r  )r?  r  r@  r  r  Noner  r  r  r  )r\  r   r]  r  r  r  r  r>   )r   zT.Optional[T.Iterable[str]]r  r  )r   r  r   r  r  T.Tuple[bool, bool]r  )ru  GT.Union[T.List[str], T.Callable[[CompileCheckMode], T.List[str]], None]r  r  )NNNN)r  z'mesonlib.FileOrString'r   r  ru  r  r   T.Optional[T.List['Dependency']]r  zT.Optional[T.Dict[str, str]]r  r  r  zcompilers.RunResult)r  r  r   r  r   r  ru  zGT.Union[None, T.List[str], T.Callable[[CompileCheckMode], T.List[str]]]r  r  r  T.Tuple[int, bool])r  r  r   r  r   r  ru  r  r  r  r  r  )r  r  r   r  r   r  ru  zIT.Union[None, T.List[str], T.Callable[['CompileCheckMode'], T.List[str]]]r  r  r  r  r  r  )r  r  r  r  r<   languager9   rH  rK  r   r   rl  r   rr  rw  rA   r  r  r  r  r  r  r  r  r  r  s   @r8   r"  r"    s   !"#$!"#$J H 8<15"'	$,/4  /  	 Q&
<|
)?		 cg=A48'+	R_R:R 2R %	R 1D	R R fj@D+b+=+I[+* 9=CG!5! @!L^!0 lpDH).
th
t!A
t #'
t 4G
t 
tr;   r"  c                     ^  \ rS rSr\R
                  rSrSSSS.         SS jjrSU 4S jjrSU 4S jjr	SS	 jr
SS
 jr    SS jrSS jrSU 4S jjrSS jrSrU =r$ )GnuDCompileri{  r   NFr)  c                  [         R                  XX#XEUXxS9	  [        R                  " U 0 5        SS/n	/ U	U	S/-   U	SS/-   U	SS/-   U R                  [        5      -   S.U l        S V
s1 s H  n
[        U
5      iM     sn
U l        [        U R                  S5      U l
        [        U R                  S	5      U l        g s  sn
f )
Nr)  z-Wallz-Wdeprecatedz-Wextraz
-Wpedantic)r'   r)   r*   r+   
everything)
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_argsr   base_optionsr	   r   _has_color_support_has_deps_support)r6   r.  r   r/  r   r-  r   r*  r+  default_warn_argsos              r8   r9   GnuDCompiler.__init__  s    
 	4'"((4 	 	I 	T2&$n5!00I;>0I|3LL):i=V)V)-)A)ABY)Z*[	]#01#0QIaL #01
 #2$,,"H "1w!G1s   (B<c                H   > U R                   (       a  [        TU ]	  U5        / $ r>   )r  r   get_colorout_args)r6   	colortyper   s     r8   r  GnuDCompiler.get_colorout_args  s    ""G%i0	r;   c                H   > U R                   (       a  [        TU ]	  X5      $ / $ r>   )r  r   r   )r6   r   r   r   s      r8   r   $GnuDCompiler.get_dependency_gen_args  s!    !!729FF	r;   c                     U R                   U   $ r>   )r  ri   s     r8   rk   GnuDCompiler.get_warn_args  s    ~~e$$r;   c                    [         U   $ r>   )r0   r   s     r8   get_optimization_args"GnuDCompiler.get_optimization_args  s    $%788r;   c           
         [        U5       H`  u  p4US S S:X  d  US S S:X  d  M  US S [        R                  R                  [        R                  R	                  X$SS  5      5      -   X'   Mb     U$ )Nr   r   r   r[   r`   s        r8   re   3GnuDCompiler.compute_parameters_with_absolute_paths  sl    /FC!u}"1&'ebgg.>.>rww||IYZY[W\?].^&^# 0 r;   c                6    U R                   R                  5       $ r>   )r   r   r@   s    r8   r  *GnuDCompiler.get_allow_undefined_link_args  s    {{3355r;   c                n   > [         TU ]  5       nU R                  R                  5       (       a  U$ US/-   $ )Nz-shared-libphobosr   get_linker_always_argsr   r
   r6   r   r   s     r8   r  #GnuDCompiler.get_linker_always_args  s7    w-/99!!K*+++r;   c                    U(       a  S/$ / $ )Nz	-freleaser?   r6   disabler   s      r8   get_assert_argsGnuDCompiler.get_assert_args      = 	r;   )r  r  r  r  r  r  r  r  r  r  r
  r  r	  r  r  r  r   r  r  r  )r  r  r  r  r   r   r   r9   r  r   rk   r  re   r  r  r  r  r  r  s   @r8   r  r  {  s      --M	B 8<15"'	H$H,/H4H  /H  	H6

%9:=BM6, r;   r  c                j    U c  g [         R                  " SU 5      nU(       a  UR                  S5      $ g )NzDMD v(\d+\.\d+\.\d+)r   )researchgroup)version_outputversion_regexs     r8   find_ldc_dmd_frontend_versionr    s3    II5~FM""1%%r;   c                     ^  \ rS rSrSrSSSSS.           SS jjrSS jrSS jrSS	 jrSS
 jr	SS jr
SS jr\SS j5       rSU 4S jjrSS jrSS jrSrU =r$ )r   i  r   NF)r   r*  r+  r  c                   [         R                  XX#XEUXxS9	  [        R                  U [        U	5      S9  S V
s1 s H  n
[	        U
5      iM     sn
U l        g s  sn
f )Nr)  )r7   r  r  r  r  )r"  r9   r2   r  r   r  )r6   r.  r   r/  r   r-  r   r*  r+  r  r  s              r8   r9   LLVMDCompiler.__init__  s`    
 	4'"((4 	 	I 	%%dA^_mAn%o3fg3faYq\3fggs   Ac                    US:X  a  S/$ / $ )Nalwaysz-enable-colorr?   r6   r  s     r8   r  LLVMDCompiler.get_colorout_args  s     #$$	r;   c                ,    US;   a  SS/$ US:X  a  S/$ / $ )N>   r*   r+   rh   z-dwr)   r?   ri   s     r8   rk   LLVMDCompiler.get_warn_args  s'    J5>!c\7N	r;   c                    S/$ )Nz-relocation-model=picr?   r@   s    r8   r   LLVMDCompiler.get_pic_args  s    '((r;   c                $    U R                  X5      $ r>   r   r   s      r8   r  LLVMDCompiler.get_crt_link_args      !!'55r;   c                b    U R                  XR                  U R                  R                  5      $ r>   r   r   r   r   rq  s     r8   unix_args_to_native!LLVMDCompiler.unix_args_to_native  !    ((yy$++..IIr;   c                T    US:w  a  U R                  5       [        U   -   $ [        U   $ r   )rA   r.   r   s     r8   r  #LLVMDCompiler.get_optimization_args  1    (--/2GHZ2[[[$%788r;   c                    SU 3/$ )Nz-linker=r?   )r   r   r   s      r8   use_linker_argsLLVMDCompiler.use_linker_args  s    6(#$$r;   c                n   > [         TU ]  5       nU R                  R                  5       (       a  U$ US/-   $ )Nz-link-defaultlib-sharedr  r  s     r8   r  $LLVMDCompiler.get_linker_always_args  s7    w-/99!!K0111r;   c                    U(       a  S/$ / $ )Nz	--releaser?   r  s      r8   r  LLVMDCompiler.get_assert_args  r  r;   c                `    [        5       (       a  [        R                  $ [        R                  $ r>   )r
   r   MSVCGCCr@   s    r8   rsp_file_syntaxLLVMDCompiler.rsp_file_syntax  s!     &0\\}!!H}7H7HHr;   r  )r.  r  r   r  r/  r   r   r  r-  r  r   r  r*  r  r+  r  r  r  r  r
  r  r  r   r  r  r  r  )r   r  r   r  r  r  r  r  r   )r  r  r  r  r   r9   r  rk   r   r  r  r  r  r   r  r  r	  r  r  r  s   @r8   r   r     s    	B 8<15"'4		h$	h,/	h4	h  /	h  		h :I		h
)6J9
 % %2
I Ir;   r   c                     ^  \ rS rSrSrSSSS.         SS jjrSS jrSS jrSS	 jrSS
 jr	SS jr
SS jrSS jrSS jrSU 4S jjrSS jrSS jrSrU =r$ )DmdDCompileri  r    NFr)  c                   [         R                  XX#XEUXxS9	  [        R                  X5        S V	s1 s H  n	[        U	5      iM     sn	U l        g s  sn	f )Nr)  r  )r"  r9   r2   r   r  )
r6   r.  r   r/  r   r-  r   r*  r+  r  s
             r8   r9   DmdDCompiler.__init__  sT    
 	4'"((4 	 	I 	%%d43fg3faYq\3fggs   Ac                    US:X  a  S/$ / $ )Nr  z	-color=onr?   r  s     r8   r  DmdDCompiler.get_colorout_args  s     = 	r;   c                    U R                   R                  5       (       a)  U R                  S:X  a  S/$ U R                  S:X  a  S/$ S/$ / $ )Nrz  phobos64.lib
x86_mscoffphobos32mscoff.lib
phobos.libr   r
   r-  r@   s    r8   get_std_exe_link_args"DmdDCompiler.get_std_exe_link_args#  sN    99!! yyH$&''l*,-- >!	r;   c                    SnU R                   R                  5       (       a(  U R                  S:X  a  SnOU R                  S:X  a  SnOSnSSU-   /$ )	Nzlibphobos2.sorz  r  r  r  r  z-sharedz-defaultlib=r  )r6   libnames     r8   get_std_shared_lib_link_args)DmdDCompiler.get_std_shared_lib_link_args.  sQ    !99!!yyH$(l*.&>G344r;   c                    U R                   R                  5       (       a)  U R                  S:X  a  S/$ U R                  S:X  a  S/$ S/$ / $ )Nrz  r{  r  z
-m32mscoffr|  r  r@   s    r8   rA   "DmdDCompiler._get_target_arch_args9  sJ     99!!yyH$xl*$~%8O	r;   c                $    U R                  X5      $ r>   r  r   s      r8   r  !DmdDCompiler.get_crt_compile_argsE  r  r;   c                b    U R                  XR                  U R                  R                  5      $ r>   r  rq  s     r8   r   DmdDCompiler.unix_args_to_nativeH  r  r;   c                T    US:w  a  U R                  5       [        U   -   $ [        U   $ r   )rA   r/   r   s     r8   r  "DmdDCompiler.get_optimization_argsK  r  r;   c                    g)NFr?   r@   s    r8   can_linker_accept_rsp"DmdDCompiler.can_linker_accept_rspP  s    r;   c                p   > [         TU ]  5       nU R                  R                  5       (       a  U$ USS/-   $ )Nz-defaultlib=phobos2z-debuglib=phobos2r  r  s     r8   r  #DmdDCompiler.get_linker_always_argsS  s:    w-/99!!K,.ABBBr;   c                    U(       a  S/$ / $ )Nz-releaser?   r  s      r8   r  DmdDCompiler.get_assert_argsY  s    <	r;   c                "    [         R                  $ r>   )r   r  r@   s    r8   r	  DmdDCompiler.rsp_file_syntax^  s    !!!r;   r  r  r  r  r  r  r  r  r  r  )r  r  r  r  r   r9   r  r  r  rA   r  r  r  r)  r  r  r	  r  r  r  s   @r8   r  r    s    	B 8<15"'		h$	h,/	h4	h  /	h  		h
		5
6J9
C
" "r;   r  )r  r  r  r  )5
__future__r   os.pathr]   r  r9  typingr  rO   r   arglistr   linkersr   r   r	   r
   optionsr   r   r   r   r   
mixins.gnur   r   r  buildr   r   r  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=     s   #  	    " #    
 $ /??.)')/(  !	  	  	1- , 		
	9	9
3 /  		

		
		
3 /  



%	&
%	&
3 / A, AH
L 
Tt TtlE;	 EZ<I() <I~P"' P"r;   