§
    ƒnóc³ó  ã                  óš  — d dl mZ 	 d dlZd dlZd dlZd dlZd dl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 ddlmZmZ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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' ne(Z% ej)        dej*        ¦  «        Z+ G d„ dej,        ¦  «        Z- G d„ de%¦  «        Z.dS )é    )ÚannotationsN©ÚPathé   )Úarglist)Úmesonlib)Úmlog)ÚGnuLikeDynamicLinkerMixinÚSolarisDynamicLinkerÚCompCertDynamicLinker)ÚLibType)Ú	OptionKeyé   )Ú	compilers)ÚCompileCheckModeé   )ÚVisualStudioLikeCompiler)Ú
Dependency)ÚImmutableListProtocol)ÚEnvironment)ÚCompiler)ÚExternalProgramz\.so (?:\.[0-9]+)? (?:\.[0-9]+)? (?:\.[0-9]+)?$ |
                             ^(?:-Wl,)?-l |
                             \.a$c                  óz   — e Zd ZdZdZdZdZdZddd„Ze	 e
j        d¬¦  «        dd„¦   «         ¦   «         Zdd„ZdS )ÚCLikeCompilerArgs)ú-Iú-L)r   ú-isystemr   z-Dz-U)ú-lz-Wl,-lz-Wl,--export-dynamic)z.libz.dllú.soz.dylibz.a)ú-cz-Sú-Ez-pipeú-pthreadFÚcopyÚboolÚreturnúT.List[str]c                óv  ‡ — t          ‰ j        t          j        ¦  «        s
J d¦   «         ‚‰                      ¦   «          |r‰                      ¦   «         }n‰ }t          ‰ j        j        t          t          t          f¦  «        rsd}d}t          |¦  «        D ]*\  }}t                               |¦  «        sŒ |}|dk     r|}Œ+|dk    r/|                     |dz   d¦  «         |                     |d¦  «         ‰ j                             ¦   «         }|�r	ˆ fd„|D ¦   «         }g }	t          |¦  «        D ]Â\  }}|                     d¦  «        sŒ|dk    rA|t!          |¦  «        dz
  k     r+‰                      ||dz            ¦  «        |v r|	||dz   gz  }	Œb|                     d	¦  «        r&‰                      |d
d …         ¦  «        |v r|	|gz  }	Œ�‰                      |dd …         ¦  «        |v r|	|gz  }	ŒÃt%          |	¦  «        D ]}|                     |¦  «         Œ‰ j                             |j        ¦  «        S )NzHow did you get hereéÿÿÿÿr   r   z-Wl,--end-groupz-Wl,--start-groupc                ó:   •— g | ]}‰                      |¦  «        ‘ŒS © )Ú_cached_realpath)Ú.0ÚiÚselfs     €úC/usr/lib/python3/dist-packages/mesonbuild/compilers/mixins/clike.pyú
<listcomp>z/CLikeCompilerArgs.to_native.<locals>.<listcomp>i   s'   ø€ Ð PÐ PÐ P¸a ×!6Ò!6°qÑ!9Ô!9Ð PÐ PÐ Pó    r   z	-isystem=é	   é   )Ú
isinstanceÚcompilerr   r   Úflush_pre_postr#   Úlinkerr
   r   r   Ú	enumerateÚGROUP_FLAGSÚsearchÚinsertÚget_default_include_dirsÚ
startswithÚlenr+   ÚreversedÚpopÚunix_args_to_nativeÚ
_container)
r.   r#   ÚnewÚgroup_startÚ	group_endr-   ÚeachÚdefault_dirsÚreal_default_dirsÚbad_idx_lists
   `         r/   Ú	to_nativezCLikeCompilerArgs.to_nativeH   sz  ø€ å˜$œ-­Ô);Ñ<Ô<ÐTÐTÐ>TÑTÔTÐTð 	×ÒÑÔÐØð 	Ø—)’)‘+”+ˆCˆCàˆCõ �d”mÔ*Õ-FÕH\Õ^sÐ,tÑuÔuð 	=ØˆKØˆIÝ$ S™>œ>ð $ð $‘��4Ý"×)Ò)¨$Ñ/Ô/ð ØØ�	Ø ’?�?à"#�KøØ˜aÒÐà—
’
˜9 q™=Ð*;Ñ<Ô<Ð<Ø—
’
˜;Ð(;Ñ<Ô<Ð<à”}×=Ò=Ñ?Ô?ˆØñ 	Ø PÐ PÐ PÐ PÀ<Ð PÑ PÔ PÐØˆLÝ$ S™>œ>ð (ð (‘��4Ø—’ zÑ2Ô2ð Øð ˜JÒ&Ð&Ø�S ™XœX¨™\Ò*Ð*Ø×-Ò-¨c°!°a±%¬jÑ9Ô9Ð=NÐNÐNØ  Q¨¨A© JÑ.�L�LØ—_’_ [Ñ1Ô1ð (°d×6KÒ6KÈDÐQRÐQSÐQSÌHÑ6UÔ6UÐYjÐ6jÐ6jØ  Q CÑ'�L�LØ×*Ò*¨4°°°¬8Ñ4Ô4Ð8IÐIÐIØ  Q CÑ'�LøÝ˜lÑ+Ô+ð ð �Ø—’˜‘
”
�
�
ØŒ}×0Ò0°´Ñ@Ô@Ð@r1   N©ÚmaxsizeÚargÚstrc                ó@   — t           j                             | ¦  «        S ©N)ÚosÚpathÚrealpath)rM   s    r/   r+   z"CLikeCompilerArgs._cached_realpath|   s   € õ Œw×Ò Ñ$Ô$Ð$r1   c                óP   — |                       ¦   «          d| j        ›d| j        ›d�S )NzCLikeCompilerArgs(z, ú))r6   r5   rB   ©r.   s    r/   Ú__repr__zCLikeCompilerArgs.__repr__�   s1   € Ø×ÒÑÔÐØK D¤MÐKÐK°t´ÐKÐKÐKÐKr1   ©F)r#   r$   r%   r&   )rM   rN   r%   rN   ©r%   rN   )Ú__name__Ú
__module__Ú__qualname__Úprepend_prefixesÚdedup2_prefixesÚdedup1_prefixesÚdedup1_suffixesÚdedup1_argsrJ   ÚstaticmethodÚ	functoolsÚ	lru_cacher+   rW   r*   r1   r/   r   r   >   s¤   € € € € € Ø#ÐØ:€Oð ?€OØ=€OØ9€Kð2Að 2Að 2Að 2Að 2Aðh Ø€YÔ Ð&Ñ&Ô&ð%ð %ð %ñ 'Ô&ñ „\ð%ðLð Lð Lð Lð Lð Lr1   r   c                  óh  ‡ — e Zd ZdZej        ri Zi Zi Ze	j
        Zd¬d­d„Z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d°d„Zd°d„Zd°d„Zd³d„Zd°d„Zd´d„Zdµd"„Z ej        ¦   «         	 d¬d¶d&„¦   «         Z	 d¬d·d'„Z ej        ¦   «         d¸d(„¦   «         Z d¹d)„Z!d°d*„Z"dºd-„Z#d»d.„Z$d°d/„Z%d¹d0„Z&d¼d2„Z'd½d8„Z(d¾d9„Z)ddd:œd¿dB„Z*dddCdDœdÀdF„Z+ddd:œdÁdI„Z,dÂdM„Z-e.j/        fdÃdP„Z0ddd:œdÄdT„Z1dÅdV„Z2	 	 dÆdÇd[„Z3dd\œdÇd]„Z4ddd:œdÈd_„Z5ddd:œdÈd`„Z6ddd:œdÉdb„Z7ddd:œdÉdc„Z8	 dÊdËdg„Z9dÌdk„Z:e;dÍdm„¦   «         Z<e;dÍdn„¦   «         Z=ddd:œdÎdp„Z>ddd:œdÏdr„Z?dd\œdÐds„Z@dÑdt„ZAdÒdv„ZBdÒdw„ZCdÑdx„ZDdÊdÓd|„ZEdÊdÔd�„ZFe;dÕdƒ„¦   «         ZGeHdÖdˆ„¦   «         ZIe;d×d‹„¦   «         ZJ ej        ¦   «         dÑdŒ„¦   «         ZKdØdŽ„ZLdØd�„ZMeNjO        fdÙd�„ZPd¹d‘„ZQdÚd“„ZRdÚd”„ZS	 dÛdÚd–„ZTdÜd™„ZUdÜdš„ZVd¹d›„ZWdÝdœ„ZXdÞd�„ZYdßdž„ZZdàdŸ„Z[dßd „Z\dàd¡„Z]e;dád£„¦   «         Z^dâd¤„Z_dãd¥„Z`d°d¦„Za ej        d¬§¦  «        däˆ fd©„¦   «         Zbdåd«„Zcˆ xZdS )æÚCLikeCompilerz(Shared bits for the C and CPP Compilers.NÚexe_wrapperúT.Optional['ExternalProgram']c                óº   — | j                              d¦  «         |r(|                     ¦   «         r|                     ¦   «         sd | _        n|| _        d | _        d S )NÚh)Úcan_compile_suffixesÚaddÚfoundÚget_commandrg   Úpreprocessor)r.   rg   s     r/   Ú__init__zCLikeCompiler.__init__’   sj   € àÔ!×%Ò% cÑ*Ô*Ð*ð ð 	+ +×"3Ò"3Ñ"5Ô"5ð 	+¸[×=TÒ=TÑ=VÔ=Vð 	+Ø#ˆDÔÐà*ˆDÔà26ˆÔÐÐr1   ÚargsúT.Optional[T.Iterable[str]]r%   r   c                ó"   — t          | |¦  «        S rP   )r   ©r.   rq   s     r/   Úcompiler_argszCLikeCompiler.compiler_argsž   s   € å   tÑ,Ô,Ð,r1   r$   c                ó   — dS )NTr*   rV   s    r/   Úneeds_static_linkerz!CLikeCompiler.needs_static_linker¢   s   € Øˆtr1   r&   c                ó*   — |                       ¦   «         S )zM
        Args that are always-on for all C compilers other than MSVC
        )Úget_largefile_argsrV   s    r/   Úget_always_argszCLikeCompiler.get_always_args¥   s   € ð ×&Ò&Ñ(Ô(Ð(r1   c                ó   — dgS )Nz	-nostdincr*   rV   s    r/   Úget_no_stdinc_argsz CLikeCompiler.get_no_stdinc_args«   ó
   € Øˆ}Ðr1   c                ó   — dgS )Nz	-nostdlibr*   rV   s    r/   Úget_no_stdlib_link_argsz%CLikeCompiler.get_no_stdlib_link_args®   r}   r1   ÚlevelrN   c                ó   — | j         |         S rP   )Ú	warn_args)r.   r€   s     r/   Úget_warn_argszCLikeCompiler.get_warn_args±   s   € àŒ~˜eÔ$Ð$r1   c                ó   — dgS )Nz-wr*   rV   s    r/   Úget_no_warn_argszCLikeCompiler.get_no_warn_argsµ   s	   € àˆvˆr1   c                ó   — dS )NÚdr*   rV   s    r/   Úget_depfile_suffixz CLikeCompiler.get_depfile_suffix¹   s   € Øˆsr1   c                ó
   — ddgS )Nr!   z-Pr*   rV   s    r/   Úget_preprocess_only_argsz&CLikeCompiler.get_preprocess_only_args¼   s   € Ø�dˆ|Ðr1   c                ó   — dgS )Nr    r*   rV   s    r/   Úget_compile_only_argsz#CLikeCompiler.get_compile_only_args¿   s	   € Øˆvˆr1   c                ó   — dgS )Nz-O0r*   rV   s    r/   Úget_no_optimization_argsz&CLikeCompiler.get_no_optimization_argsÂ   s	   € Øˆwˆr1   Ú
outputnamec                ó
   — d|gS )Nz-or*   )r.   r�   s     r/   Úget_output_argszCLikeCompiler.get_output_argsÅ   s   € Ø�jÐ!Ð!r1   c                ó   — dgS ©Nz-Werrorr*   rV   s    r/   Úget_werror_argszCLikeCompiler.get_werror_argsÈ   s
   € Øˆ{Ðr1   rR   Ú	is_systemc                ó*   — |dk    rd}|rd|gS d|z   gS )NÚ ú.r   r   r*   )r.   rR   r•   s      r/   Úget_include_argszCLikeCompiler.get_include_argsË   s/   € Ø�2Š:ˆ:ØˆDØð 	&Ø Ð%Ð%Ø�t‘ˆ}Ðr1   Úenvú'Environment'Únamec                ó   — g S )zP
        Get dirs from the compiler, either `libraries:` or `programs:`
        r*   )r.   rš   rœ   s      r/   Úget_compiler_dirszCLikeCompiler.get_compiler_dirsÒ   s	   € ð ˆ	r1   Ú	elf_classúT.Optional[int]ú'ImmutableListProtocol[str]'c                ó&  ‡
— |                       |d¦  «        }|�|dk    r|S g }|D ]êŠ
ˆ
fd„t          j        ‰
¦  «        D ¦   «         }|s|                     ‰
¦  «         Œ:|D ]­}t          j                             ‰
|¦  «        }	 t          |d¦  «        5 }|                     d¦  «        }	|	dd…         dk    st          |	d         ¦  «        |k    r|                     ‰
¦  «         d d d ¦  «         n# 1 swxY w Y    n# t          $ r Y Œªw xY wŒë|S )	NÚ	librariesr   c                ó¸   •— g | ]V}|                      d ¦  «        ¯t          j                             t          j                             ‰|¦  «        ¦  «        ¯T|‘ŒWS )r   )ÚendswithrQ   rR   ÚisfileÚjoin)r,   Úfr‡   s     €r/   r0   z3CLikeCompiler._get_library_dirs.<locals>.<listcomp>ç   sS   ø€ ÐjÐjÐj˜1°·²¸EÑ1BÔ1BÐjÅrÄwÇ~Â~ÕVXÔV]×VbÒVbÐcdÐfgÑVhÔVhÑGiÔGiÐj�QÐjÐjÐjr1   Úrbé   r   é   s   ELF)
rž   rQ   ÚlistdirÚappendrR   r§   ÚopenÚreadÚintÚOSError)r.   rš   rŸ   ÚdirsÚretvalÚfilesr¨   Úfile_to_checkÚfdÚheaderr‡   s             @r/   Ú_get_library_dirszCLikeCompiler._get_library_dirsØ   s…  ø€ ð ×%Ò% c¨;Ñ7Ô7ˆØÐ 	¨Q¢ ØˆKð ˆØð 	ð 	ˆAØjÐjÐjÐj¥¤
¨1¡¤ÐjÑjÔjˆEàð Ø—’˜aÑ Ô Ð Øàð ð �Ý "¤§¢¨Q°Ñ 2Ô 2�ðÝ˜m¨TÑ2Ô2ð -°bØ!#§¢¨¡¤˜ð " ! A #œ;¨&Ò0Ð0µC¸¸q¼	±N´NÀiÒ4OÐ4OØ"ŸMšM¨!Ñ,Ô,Ð,ð-ð -ð -ñ -ô -ð -ð -ð -ð -ð -ð -øøøð -ð -ð -ð -ð �EøÝð ð ð à�Dðøøøøð ˆs7   ÂD ÂAC3Ã'D Ã3C7Ã7D Ã:C7Ã;D Ä 
DÄDc                óR   — |                       ||¦  «                             ¦   «         S )znWrap the lru_cache so that we return a new copy and don't allow
        mutation of the cached value.
        )r¸   r#   )r.   rš   rŸ   s      r/   Úget_library_dirszCLikeCompiler.get_library_dirs   s&   € ð
 ×%Ò% c¨9Ñ5Ô5×:Ò:Ñ<Ô<Ð<r1   c                ó.   — |                       |d¦  «        S )z€
        Programs used by the compiler. Also where toolchain DLLs such as
        libstdc++-6.dll are found with MinGW.
        Úprograms)rž   ©r.   rš   s     r/   Ú_get_program_dirszCLikeCompiler._get_program_dirs  s   € ð ×%Ò% c¨:Ñ6Ô6Ð6r1   c                óP   — |                       |¦  «                             ¦   «         S rP   )r¾   r#   r½   s     r/   Úget_program_dirszCLikeCompiler.get_program_dirs  s"   € Ø×%Ò% cÑ*Ô*×/Ò/Ñ1Ô1Ð1r1   c                ó   — dgS )Nz-fPICr*   rV   s    r/   Úget_pic_argszCLikeCompiler.get_pic_args  s
   € ØˆyÐr1   Úpch_dirr·   c                óD   — dt           j                             |¦  «        gS )Nz-include)rQ   rR   Úbasename)r.   rÃ   r·   s      r/   Úget_pch_use_argszCLikeCompiler.get_pch_use_args  s   € Ø�BœG×,Ò,¨VÑ4Ô4Ð5Ð5r1   c                óp   — t           j                             |¦  «        dz   |                      ¦   «         z   S )Nr˜   )rQ   rR   rÅ   Úget_pch_suffix©r.   rœ   s     r/   Úget_pch_namezCLikeCompiler.get_pch_name  s.   € ÝŒw×Ò Ñ%Ô%¨Ñ+¨d×.AÒ.AÑ.CÔ.CÑCÐCr1   c                ó   — g S rP   r*   rV   s    r/   r<   z&CLikeCompiler.get_default_include_dirs  s   € Øˆ	r1   c                ó6   — | j                              |¦  «        S rP   )r7   Úexport_dynamic_argsr½   s     r/   Úgen_export_dynamic_link_argsz*CLikeCompiler.gen_export_dynamic_link_args  s   € ØŒ{×.Ò.¨sÑ3Ô3Ð3r1   Ú
implibnamec                ó6   — | j                              |¦  «        S rP   )r7   Úimport_library_args)r.   rÏ   s     r/   Úgen_import_library_argsz%CLikeCompiler.gen_import_library_args!  s   € ØŒ{×.Ò.¨zÑ:Ô:Ð:r1   Úwork_dirÚenvironmentÚsnameÚcodeÚNonec                ó”  — t          j        d|                      ¦   «         z   dz   t          j        | j        ¦  «        ¦  «         t          j        d| j        ›d�¦  «         t          j         	                    ||¦  «        }| 
                    dd¦  «        d         }t          j        }| j        r|dz  }| j        €t          j        }|                      ||¦  «        \  }}	||                      |	¦  «        z   }
|dz  }t          j         	                    ||¦  «        }t#          |d	d
¬¦  «        5 }|                     |¦  «         d d d ¦  «         n# 1 swxY w Y   | j        |gz   |                      |¦  «        z   |
z   }t          j        ||¬¦  «        \  }}}t          j        dt          j        |¦  «        ¦  «         t          j        d¦  «         t          j        |¦  «         t          j        d¦  «         t          j        |¦  «         t          j        d¦  «         |j        dk    r*t          j        d|                      ¦   «         › d�¦  «        ‚| j        r'| j        €d S | j                             ¦   «         |gz   }n|g}t          j        dt          j        |¦  «        ¦  «         	 t3          j        |t2          j        t2          j        ¬¦  «        }n*# t8          $ r}t          j        d|›d�¦  «        ‚d }~ww xY w|j        dk    r2t          j        d| j        › d|                      ¦   «         › d�¦  «        ‚d S )NzSanity testing z
 compiler:zIs cross compiler: r˜   r   r   Ú_crossz.exeÚwzutf-8)Úencoding)Úcwdz#Sanity check compiler command line:zSanity check compile stdout:z"-----
Sanity check compile stderr:z-----z	Compiler z can not compile programs.zRunning test binary command: )ÚstdoutÚstderrz)Could not invoke sanity test executable: zExecutables created by z
 compiler z are not runnable.)r	   ÚdebugÚget_display_languager   Ú	join_argsÚexelistÚis_crossrQ   rR   r§   Úrsplitr   ÚLINKrg   ÚCOMPILEÚ_get_basic_compiler_argsÚlinker_to_compiler_argsr®   Úwriter‘   Ú
Popen_safeÚ
returncodeÚEnvironmentExceptionÚname_stringrn   Ú
subprocessÚrunÚDEVNULLÚ	ExceptionÚlanguage)r.   rÓ   rÔ   rÕ   rÖ   Úsource_nameÚbinnameÚmodeÚcargsÚlargsÚextra_flagsÚbinary_nameÚofileÚcmdlistÚpcÚstdoÚstdeÚpeÚes                      r/   Ú_sanity_check_implz CLikeCompiler._sanity_check_impl$  sŒ  € åŒ
Ð$ t×'@Ò'@Ñ'BÔ'BÑBÀ\ÑQÕS[ÔSeÐfjÔfrÑSsÔSsÑtÔtÐtÝŒ
Ð;¨¬Ð;Ð;Ð;Ñ<Ô<Ð<å”g—l’l 8¨UÑ3Ô3ˆØ—,’,˜s AÑ&Ô& qÔ)ˆÝÔ$ˆØŒ=ð 	0Ø�xÑˆGØÔÐ'õ (Ô/�Ø×4Ò4°[À$ÑGÔG‰ˆˆuØ˜d×:Ò:¸5ÑAÔAÑAˆð 	�6Ñˆå”g—l’l 8¨WÑ5Ô5ˆÝ�+˜s¨WÐ5Ñ5Ô5ð 	¸Ø�KŠK˜ÑÔÐð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð
 ”, % Ñ(¨4×+?Ò+?ÀÑ+HÔ+HÑHÈ;ÑVˆÝ!Ô,¨W¸(ÐCÑCÔC‰ˆˆD�$ÝŒ
Ð8½(Ô:LÈWÑ:UÔ:UÑVÔVÐVÝŒ
Ð1Ñ2Ô2Ð2ÝŒ
�4ÑÔÐÝŒ
Ð8Ñ9Ô9Ð9ÝŒ
�4ÑÔÐÝŒ
�7ÑÔÐØŒ=˜AÒÐÝÔ/Ð0j¸D×<LÒ<LÑ<NÔ<NÐ0jÐ0jÐ0jÑkÔkÐkàŒ=ð 	$ØÔÐ'à�ØÔ&×2Ò2Ñ4Ô4¸°}ÑDˆGˆGà"�mˆGÝŒ
Ð2µHÔ4FÀwÑ4OÔ4OÑPÔPÐPð	då” µ
Ô0BÍ:ÔK]Ð^Ñ^Ô^ˆBˆBøÝð 	dð 	dð 	dÝÔ/Ð0bÐ\]Ð0bÐ0bÐ0bÑcÔcÐcøøøøð	døøøàŒ=˜AÒÐÝÔ/ð  1JÈ$Ì-ð  1Jð  1JÐcg×csÒcsÑcuÔcuð  1Jð  1Jð  1Jñ  Kô  Kð  Kð Ðs*   Ä1EÅEÅEÊ5+K! Ë!
LË+LÌLc                ó6   — d}|                       ||d|¦  «        S )Nz.int main(void) { int class=0; return class; }
zsanitycheckc.c)r  )r.   rÓ   rÔ   rÖ   s       r/   Úsanity_checkzCLikeCompiler.sanity_check\  s#   € Ø@ˆØ×&Ò& x°Ð>NÐPTÑUÔUÐUr1   ©Ú
extra_argsÚdependenciesÚhnameÚprefixr  úIT.Union[None, T.List[str], T.Callable[['CompileCheckMode'], T.List[str]]]r  ú T.Optional[T.List['Dependency']]úT.Tuple[bool, bool]c               óD   — |› d|› d�}|                       ||||¬¦  «        S )Nú
        #include <ú>r  ©Úcompiles)r.   r  r  rš   r  r  rÖ   s          r/   Úcheck_headerzCLikeCompiler.check_header`  sI   € ð ð ð Øðð ð ˆà�}Š}˜T 3°:Ø*6ð ñ 8ô 8ð 	8r1   F)r  r  Údisable_cacher  c               óT   — |› d|› d|› d|› d�}|                       ||||d|¬¦  «        S )Nz;
        #ifdef __has_include
         #if !__has_include("z")
          #error "Header 'zG' could not be found"
         #endif
        #else
         #include <z>
        #endifÚ
preprocess)r  r  rõ   r  r  )r.   r  r  rš   r  r  r  rÖ   s           r/   Ú
has_headerzCLikeCompiler.has_headerh  sq   € ð ð ð à#ðð ð !ðð ð ðð ð ˆð �}Š}˜T 3°:Ø*6¸\ÐYfð ñ hô hð 	hr1   ÚsymbolúGT.Union[None, T.List[str], T.Callable[[CompileCheckMode], T.List[str]]]c               óP   — |› d|› d|› d|› d�}|                       ||||¬¦  «        S )Nr  zx>
        int main(void) {
            /* If it's not defined as a macro, try to use as a symbol */
            #ifndef z
                z4;
            #endif
            return 0;
        }r  r  )r.   r  r  r  rš   r  r  Úts           r/   Úhas_header_symbolzCLikeCompiler.has_header_symbolw  si   € ð ð ð Øðð ð ð	ð ð
 ðð ð ˆð �}Š}˜Q °
Ø*6ð ñ 8ô 8ð 	8r1   rõ   r   ú!T.Tuple[T.List[str], T.List[str]]c                ó  ‡
— g }g }|t           j        u rz	 |j        j        t	          d¦  «                 j        }|j        j        t	          d¦  «                 j        }||                      ||¦  «        z  }n# t          t          f$ r Y nw xY w|j         	                    | j
        | j        ¦  «        Š
t          ‰
t          ¦  «        r‰
gŠ
|                      ‰
¦  «        }||z  }|t           j        u r|                     | j
        | j        dz   ¦  «        }|�$||                      |d         | j        ¦  «        z  }|j                             | j
        | j        ¦  «        }	|ˆ
fd„|	D ¦   «         z  }||                      |¦  «        z  }||fS )NÚb_vscrtÚ	buildtypeÚ_ldr   c                ó   •— g | ]}|‰v¯|‘Œ	S r*   r*   )r,   ÚxÚsys_argss     €r/   r0   z:CLikeCompiler._get_basic_compiler_args.<locals>.<listcomp>ª  s#   ø€ ÐBÐBÐB˜A°¸Ð0AÐ0A�aÐ0AÐ0AÐ0Ar1   )r   rå   ÚcoredataÚoptionsr   ÚvalueÚget_crt_compile_argsÚKeyErrorÚAttributeErrorÚget_external_argsÚfor_machinerò   r4   rN   Úremove_linkerlike_argsÚlookup_binary_entryÚuse_linker_argsÚversionÚget_external_link_argsÚget_compiler_args_for_mode)r.   rš   rõ   rö   r÷   Úcrt_valr  Úcleaned_sys_argsÚld_valueÚsys_ld_argsr"  s             @r/   rç   z&CLikeCompiler._get_basic_compiler_args‡  s¦  ø€ ØˆØˆØÕ#Ô(Ð(Ð(ð
Øœ,Ô.­y¸Ñ/CÔ/CÔDÔJ�ØœLÔ0µ¸;Ñ1GÔ1GÔHÔN�	Ø˜×2Ò2°7¸IÑFÔFÑF��øÝ�nÐ-ð ð ð Ø�ðøøøð ”<×1Ò1°$Ô2BÀDÄMÑRÔRˆÝ�h¥Ñ$Ô$ð 	"Ø �zˆHð
  ×6Ò6°xÑ@Ô@ÐØÐ!Ñ!ˆàÕ#Ô(Ð(Ð(Ø×.Ò.¨tÔ/?ÀÄÐQVÑAVÑWÔWˆHØÐ#Ø˜×-Ò-¨h°q¬k¸4¼<ÑHÔHÑH�ð œ,×=Ò=¸dÔ>NÐPTÔP]Ñ^Ô^ˆKð ÐBÐBÐBÐB ÐBÑBÔBÑBˆEà�×0Ò0°Ñ6Ô6Ñ6ˆØ�eˆ|Ðs   •A!A7 Á7BÂ
Bú]T.Union[None, arglist.CompilerArgs, T.List[str], T.Callable[[CompileCheckMode], T.List[str]]]úarglist.CompilerArgsc                óP  ‡— |€g }nt          j        |¦  «        }t          j        ˆfd„|D ¦   «         ¦  «        }|€g }n"t          |t          j        j        ¦  «        s|g}|                      ¦   «         }g }|D ]>}||                     ¦   «         z  }‰t          j	        u r|| 
                    ¦   «         z  }Œ?|                      |‰¦  «        \  }}	||z  }||	z  }||                      ‰¦  «        z  }|                      g ¦  «        dgk    r|g k    r
d|vr|dgz  }||z   |z   }
|
S )Nc                óR   •— g | ]#}t          |¦  «        r |‰j        ¦  «        n|‘Œ$S r*   )Úcallabler%  )r,   r   rõ   s     €r/   r0   z4CLikeCompiler.build_wrapper_args.<locals>.<listcomp>¹  s2   ø€ Ð&_Ð&_Ð&_Èq½À¹¼Ð'J q q¨¬¡}¤} }ÈÐ&_Ð&_Ð&_r1   z/link)r   Úlistifyr4   ÚcollectionsÚabcÚIterableru   Úget_compile_argsr   rå   Úget_link_argsrç   Úget_compiler_check_argsrè   )r.   rš   r  r  rõ   rö   r÷   r‡   ÚcaÚlarq   s       `      r/   Úbuild_wrapper_argsz CLikeCompiler.build_wrapper_args¯  sg  ø€ ð
 ÐØˆJˆJõ "Ô)¨*Ñ5Ô5ˆJÝÔ%Ð&_Ð&_Ð&_Ð&_ÐT^Ð&_Ñ&_Ô&_Ñ`Ô`ˆ
àÐØˆLˆLÝ˜L­+¬/Ô*BÑCÔCð 	*à(˜>ˆLà×"Ò"Ñ$Ô$ˆØˆØð 	+ð 	+ˆAà�Q×'Ò'Ñ)Ô)Ñ)ˆEØÕ'Ô,Ð,Ð,à˜ŸšÑ*Ô*Ñ*�øà×.Ò.¨s°DÑ9Ô9‰ˆˆBØ�‰ˆØ�‰ˆà�×-Ò-¨dÑ3Ô3Ñ3ˆð ×'Ò'¨Ñ+Ô+°¨yÒ8Ð8¸UÀbº[¸[ÈWÐ\fÐMfÐMfØ˜7˜)Ñ#ˆJà�zÑ! EÑ)ˆØˆr1   ú'mesonlib.FileOrString'úGT.Union[T.List[str], T.Callable[[CompileCheckMode], T.List[str]], None]úcompilers.RunResultc          	     ó‚  — |                      | j        ¦  «        }|r| j        €t          j        d¦  «        ‚|                      ||||dd¬¦  «        5 }|j        dk    rEt          j        d|j	        › d|j        › d�¦  «         t          j
        d	¦  «        cd d d ¦  «         S |r#| j                             ¦   «         |j        gz   }n|j        g}	 t          j        |¦  «        \  }}	}
nR# t          $ rE}t          j        d
|› d|› d�¦  «         t          j
        d	¦  «        cY d }~cd d d ¦  «         S d }~ww xY w	 d d d ¦  «         n# 1 swxY w Y   t          j        d¦  «         t          j        |	¦  «         t          j        d¦  «         t          j        |
¦  «         t          j
        d|j        |	|
¦  «        S )Nz8Can not run test applications in this cross environment.ÚlinkT)rõ   Úwant_outputr   zCould not compile test file z: ú
FzCould not run: z	 (error: z)
zProgram stdout:
zProgram stderr:
)Úneed_exe_wrapperr*  rg   r   ÚCrossNoRunExceptionÚ_build_wrapperrë   r	   rß   Ú
input_nameÚ	RunResultrn   Úoutput_namer   rê   rñ   )r.   rÖ   rš   r  r  rK  Úprû   rÿ   ÚsoÚser   s               r/   rï   zCLikeCompiler.runØ  sQ  € ð ×/Ò/°Ô0@ÑAÔAÐØð 	l Ô 0Ð 8ÝÔ/Ð0jÑkÔkÐkØ× Ò   s¨J¸È6Ð_cÐ ÑdÔdð 	2ÐhiØŒ|˜qÒ Ð Ý”
ÐZ¸!¼,ÐZÐZÈ!Ì,ÐZÐZÐZÑ[Ô[Ð[Ý Ô*¨5Ñ1Ô1ð	2ð 	2ð 	2ð 	2ñ 	2ô 	2ð 	2ð 	2ð  ð *ØÔ*×6Ò6Ñ8Ô8¸A¼M¸?ÑJ��àœ=˜/�ð2Ý%Ô0°Ñ9Ô9‘
��B˜˜øÝð 2ð 2ð 2Ý”
ÐE¨WÐEÐE¸qÐEÐEÐEÑFÔFÐFÝ Ô*¨5Ñ1Ô1Ð1Ð1Ð1Ð1Ð1ð	2ð 	2ð 	2ð 	2ñ 	2ô 	2ð 	2ð 	2øøøøð2øøøð ð	2ð 	2ð 	2ñ 	2ô 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2øøøð 	2ð 	2ð 	2ð 	2õ 	Œ
Ð&Ñ'Ô'Ð'ÝŒ
�2‰ŒˆÝŒ
Ð&Ñ'Ô'Ð'ÝŒ
�2‰ŒˆÝÔ" 4¨¬¸¸BÑ?Ô?Ð?sI   ÁAE
Â$-E
ÃC+Ã*E
Ã+
D:Ã5.D5Ä#D:Ä$E
Ä5D:Ä:E
Å
EÅEÚ
expressionc                óR   — d|› d|› d�}|                       ||||¬¦  «        d         S )Nú#include <stdio.h>
        z-
        int main(void) { static int a[1-2*!(z)]; a[0]=0; return 0; }r  r   r  )r.   rT  r  rš   r  r  r  s          r/   Ú_compile_intzCLikeCompiler._compile_intò  s\   € ðUØ	ðUð Uà.8ðUð Uð Uˆð �}Š}˜Q °
Ø*6ð ñ 8ô 8Ø89ô;ð 	;r1   ÚlowÚhighÚguessr°   c	                ó  — t          |t          ¦  «        r |                      |› d|› �||||¦  «        r|S d}	d}
t          |t          ¦  «        rt          |t          ¦  «        �s	|                      |› d�||||¦  «        rxdx}}|                      |› d|› �||||¦  «        rS|dz   }||	k    rt          j        d¦  «        ‚t          |d	z  dz   |	¦  «        }|                      |› d|› �||||¦  «        °S|}nÉd
x}}|                      |› d|› �||||¦  «        rP|dz
  }||
k     rt          j        d¦  «        ‚t          |d	z  |
¦  «        }|                      |› d|› �||||¦  «        °P|}nT||k     rt          j        d¦  «        ‚|› d|› d|› d|› �}|                      |||||¦  «        st          j        d¦  «        ‚||k    rD|t          ||z
  d	z  ¦  «        z   }|                      |› d|› �||||¦  «        r|}n|dz   }||k    °D|S )Nz == iÿÿÿi   €z >= 0r   z > r   zCross-compile check overflowedr   r(   z < z!high limit smaller than low limitz <= z && z >= zValue out of given range)r4   r°   rW  r   rì   ÚminÚmax)r.   rT  rX  rY  rZ  r  rš   r  r  ÚmaxintÚminintÚcurÚ	conditions                r/   Úcross_compute_intzCLikeCompiler.cross_compute_intû  sÕ  € õ
 �e�SÑ!Ô!ð 	Ø× Ò  JÐ!;Ð!;°EÐ!;Ð!;¸VÀSÈ*ÐVbÑcÔcð Ø�ð ˆØˆÝ˜#�sÑ#Ô#ð 	P­:°d½CÑ+@Ô+@ñ 	PØ× Ò  JÐ!5Ð!5Ð!5°v¸sÀJÐP\Ñ]Ô]ð Ø���cØ×'Ò'¨:Ð(?Ð(?¸#Ð(?Ð(?ÀÈÈjÐZfÑgÔgð 3Ø ™'�CØ˜V’|�|Ý&Ô;Ð<\Ñ]Ô]Ð]Ý˜c A™g¨™k¨6Ñ2Ô2�Cð	 ×'Ò'¨:Ð(?Ð(?¸#Ð(?Ð(?ÀÈÈjÐZfÑgÔgð 3ð
 ��à���sØ×'Ò'¨:Ð(?Ð(?¸#Ð(?Ð(?ÀÈÈjÐZfÑgÔgð /Ø ™7�DØ˜f’}�}Ý&Ô;Ð<\Ñ]Ô]Ð]Ý˜c A™g vÑ.Ô.�Cð	 ×'Ò'¨:Ð(?Ð(?¸#Ð(?Ð(?ÀÈÈjÐZfÑgÔgð /ð
 ��ð �cŠzˆzÝÔ3Ð4WÑXÔXÐXØ%ÐJÐJ¨4ÐJÐJ°ZÐJÐJÀSÐJÐJˆIØ×$Ò$ Y°¸¸ZÈÑVÔVð PÝÔ3Ð4NÑOÔOÐOð �TŠkˆkØ�˜T C™Z¨1Ñ,Ñ-Ô-Ñ-ˆCØ× Ò  JÐ!9Ð!9°CÐ!9Ð!9¸6À3È
ÐT`ÑaÔað Ø��à˜A‘g�ð �TŠkˆkð ˆ
r1   )r  c          
     ó  — |€g }| j         r|                      ||||||||¦  «        S d|› d|› d�}	|                      |	|||¬¦  «        }
|
j        sdS |
j        dk    rt          j        d¦  «        ‚t          |
j        ¦  «        S )Nú#include<stdio.h>
        z=
        int main(void) {
            printf("%ld\n", (long)(z#));
            return 0;
        }r  r(   r   z&Could not run compute_int test binary.)	rã   rb  rï   Úcompiledrë   r   rì   r°   rÝ   )r.   rT  rX  rY  rZ  r  rš   r  r  r  Úress              r/   Úcompute_intzCLikeCompiler.compute_int*  sÆ   € ð ÐØˆJØŒ=ð 	oØ×)Ò)¨*°c¸4ÀÈÐPSÐU_ÐamÑnÔnÐnðØ	ðð ð &0ðð ð ˆð �hŠh�q˜#¨*Ø$0ð ñ 2ô 2ˆàŒ|ð 	Ø�2ØŒ>˜QÒÐÝÔ/Ð0XÑYÔYÐYÝ�3”:‰ŒÐr1   Útypenamec          
     óž   — |€g }d|› d|› d�}|                       ||||¬¦  «        d         sdS |                      d|› d�d d d ||||¦  «        S )	NrV  ú&
        int main(void) {
            ú+ something;
            return 0;
        }r  r   r(   zsizeof(rU   ©r  rb  ©r.   rh  r  rš   r  r  r  s          r/   Úcross_sizeofzCLikeCompiler.cross_sizeof@  s›   € ð ÐØˆJðØ	ðð ð ðð ð ˆð �}Š}˜Q °
Ø*6ð ñ 8ô 8Ø89ô;ð 	à�2Ø×%Ò%Ð&;°Ð&;Ð&;Ð&;¸TÀ4ÈÈvÐWZÐ\fÐhtÑuÔuÐur1   c               ó  — |€g }| j         r|                      |||||¬¦  «        S d|› d|› d�}|                      ||||¬¦  «        }|j        sdS |j        dk    rt          j        d¦  «        ‚t          |j        ¦  «        S )Nr  rd  zD
        int main(void) {
            printf("%ld\n", (long)(sizeof(z$)));
            return 0;
        }r(   r   z!Could not run sizeof test binary.)	rã   rn  rï   re  rë   r   rì   r°   rÝ   )r.   rh  r  rš   r  r  r  rf  s           r/   ÚsizeofzCLikeCompiler.sizeofP  sÌ   € ð ÐØˆJØŒ=ð 	@Ø×$Ò$ X¨v°sÀzØ2>ð %ñ @ô @ð @ðØ	ðð ð -5ðð ð ˆð �hŠh�q˜#¨*Ø$0ð ñ 2ô 2ˆàŒ|ð 	Ø�2ØŒ>˜QÒÐÝÔ/Ð0SÑTÔTÐTÝ�3”:‰ŒÐr1   úT.Optional[T.List[str]]c          
     ó¨   — |€g }d|› d|› d�}|                       ||||¬¦  «        d         sdS d|› d|› d	�}|                      d
d d d ||||¦  «        S )NrV  rj  rk  r  r   r(   z#include <stddef.h>
        ú6
        struct tmp {
            char c;
            z target;
        };zoffsetof(struct tmp, target)rl  rm  s          r/   Úcross_alignmentzCLikeCompiler.cross_alignmentf  s¼   € ð ÐØˆJðØ	ðð ð ðð ð ˆð �}Š}˜Q °
Ø*6ð ñ 8ô 8Ø89ô;ð 	à�2ðØ	ðð ð ð	ð ð ˆð ×%Ò%Ð&DÀdÈDÐRVÐXYÐ[^Ð`jÐlxÑyÔyÐyr1   c               ól  — |€g }| j         r|                      |||||¬¦  «        S d|› d|› d�}|                      ||||¬¦  «        }|j        st	          j        d¦  «        ‚|j        dk    rt	          j        d¦  «        ‚t          |j        ¦  «        }|dk    rt	          j        d|› d	�¦  «        ‚|S )
Nr  z7#include <stdio.h>
        #include <stddef.h>
        rs  z‰ target;
        };
        int main(void) {
            printf("%d", (int)offsetof(struct tmp, target));
            return 0;
        }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ã   rt  rï   re  r   rì   rë   r°   rÝ   )	r.   rh  r  rš   r  r  r  rf  Úaligns	            r/   Ú	alignmentzCLikeCompiler.alignment|  s  € ð ÐØˆJØŒ=ð 	CØ×'Ò'¨°&¸#È*Ø5Að (ñ Cô Cð Cð
à	ð
ð 
ð
 ð
ð 
ð 
ˆð �hŠh�q˜#¨*Ø$0ð ñ 2ô 2ˆàŒ|ð 	UÝÔ/Ð0SÑTÔTÐTØŒ>˜QÒÐÝÔ/Ð0VÑWÔWÐWÝ�C”J‘”ˆØ�AŠ:ˆ:ÝÔ/ð  1EÐT\ð  1Eð  1Eð  1Eñ  Fô  Fð  FØˆr1   ÚdnameúAT.Union[T.List[str], T.Callable[[CompileCheckMode], T.List[str]]]úT.Tuple[str, bool]c           
     ó:  — d}d|› d|› d|› d|› d|› �
}|                       |||t          j        ¬¦  «                             ¦   «         }	t	          j        | j        ||j        |	d¬	¦  «        }
|r#t	          j        | j        ||	d|j	        ¬
¦  «        }
 |
¦   «         5 }|j
        }|j        dk    rt          j        d|›�¦  «        ‚	 d d d ¦  «         n# 1 swxY w Y   |                      |j                             |dz   ¦  «        d         d d…         ¦  «        |fS )Nz"MESON_GET_DEFINE_DELIMITER"z	
        z
        #ifndef z
        # define z
        #endif
        rJ  ©rõ   r  ©r  rõ   )r  rõ   Útemp_dirr   zCould not get define r(   )rC  r   Ú
PREPROCESSrJ   rc   ÚpartialÚcached_compiler#  ÚcompileÚscratch_dirÚcachedrë   r   rì   Ú_concatenate_string_literalsrÝ   Úsplit)r.   rx  r  rš   r  r  r  ÚdelimrÖ   rq   ÚfuncrQ  r„  s                r/   Ú
get_definezCLikeCompiler.get_defineš  s¹  € ð /ˆðØ	ðð àðð ð ðð ð
 
ðð ð
 ðð ˆð ×&Ò& s¨J¸Ý,<Ô,Gð 'ñ Iô IßIRÊÉÌð 	åÔ  Ô!4°d¸C¼LÐUYÐ`lÐmÑmÔmˆØð 	wÝÔ$ T¤\°4ÀDÈ|ÐfiÔfuÐvÑvÔvˆDØˆT‰VŒVð 	W�qØ”XˆFØŒ|˜qÒ Ð ÝÔ3Ð4UÈEÐ4UÐ4UÑVÔVÐVð !ð	Wð 	Wð 	Wñ 	Wô 	Wð 	Wð 	Wð 	Wð 	Wð 	Wð 	Wøøøð 	Wð 	Wð 	Wð 	Wð ×0Ò0°´·²ÀÈÁÑ1MÔ1MÈbÔ1QÐRUÐSUÐRUÔ1VÑWÔWÐY_Ð_Ð_s   Â*CÃCÃCÚfnameÚrtypeúT.Union[str, int]c                ó²  — |dk    rd}d}n|dk    rd}d}nt          d|›�¦  «        ‚|› d|› d	|› d
|› d�}	|                      |	|||¬¦  «        }
|
j        st          j        d|› d�¦  «        ‚|dk    r|
j        S |dk    rM	 t          |
j                             ¦   «         ¦  «        S # t          $ r t          j        d|› d�¦  «        ‚w xY wJ d¦   «         ‚)NÚstringz%sz(char*)r°   z%lliz(long long int)zBUG: Unknown return type zJ
        #include <stdio.h>
        int main(void) {
            printf ("z", ú z$());
            return 0;
        }r  zCould not get return value of z()zReturn value of z() is not an intFÚUnreachable)	ÚAssertionErrorrï   re  r   rì   rÝ   r°   ÚstripÚ
ValueError)r.   rŠ  r‹  r  rš   r  r  ÚfmtÚcastrÖ   rf  s              r/   Úget_return_valuezCLikeCompiler.get_return_value³  sT  € ð
 �HÒÐØˆCØˆDˆDØ�eŠ^ˆ^ØˆCØ$ˆDˆDå Ð!F¸UÐ!FÐ!FÑGÔGÐGØð ð ð ðð ð #ðð ð &+ðð ð ˆð �hŠh�t˜S¨ZÀlˆhÑSÔSˆØŒ|ð 	\ÝÔ/Ð0ZÐQVÐ0ZÐ0ZÐ0ZÑ[Ô[Ð[Ø�HÒÐØ”:ÐØ�eŠ^ˆ^ð`Ý˜3œ:×+Ò+Ñ-Ô-Ñ.Ô.Ð.øÝð `ð `ð `ÝÔ3Ð4^ÀuÐ4^Ð4^Ð4^Ñ_Ô_Ð_ð`øøøà#�mÑ#Ô#Ð#s   Â%B) Â)#CúT.Tuple[str, str]c                 ó   — d} | dz  } d}| |fS )a0  
        Try to find the function without a prototype from a header by defining
        our own dummy prototype and trying to link with the C library (and
        whatever else the compiler links in by default). This is very similar
        to the check performed by Autoconf for AC_CHECK_FUNCS.
        z‚
        #define {func} meson_disable_define_of_{func}
        {prefix}
        #include <limits.h>
        #undef {func}
        zb
        #ifdef __cplusplus
        extern "C"
        #endif
        char {func} (void);
        zA
        int main(void) {{
          return {func} ();
        }}r*   ©ÚheadÚmains     r/   Ú_no_prototype_templz!CLikeCompiler._no_prototype_templÒ  s-   € ðˆð 	ð ñ 	ˆðˆð �TˆzÐr1   c                 ó   — d} d}| |fS )z¤
        Returns a head-er and main() call that uses the headers listed by the
        user for the function prototype while checking if a function exists.
        z{prefix}
#include <limits.h>
z‰
int main(void) {{
            void *a = (void*) &{func};
            long long b = (long long) a;
            return (int) b;
        }}r*   r™  s     r/   Ú_have_prototype_templz#CLikeCompiler._have_prototype_templõ  s   € ð 1ˆð
ˆð
 �TˆzÐr1   Úfuncnamec               ó¢  — |€g }d|z   }|                      dd¦  «        }| j        rS|j        j                             |d¦  «        }|�1t          |t          ¦  «        r|dfS t          j        d|› d�¦  «        ‚||dœ}d	}	d
|v r|  	                    ¦   «         \  }
}n|  
                    ¦   «         \  }
}|
|	z   |z   }|                       |j        di |¤Ž|||¬¦  «        \  }}|rd|fS |                      ¦   «         dv rdS d
|v|d<   |                     d¦  «        }||d<   |rdnd|d<   d}|                       |j        di |¤Ž|||¬¦  «        S )aˆ  Determine if a function exists.

        First, this function looks for the symbol in the default libraries
        provided by the compiler (stdlib + a few others usually). If that
        fails, it checks if any of the headers specified in the prefix provide
        an implementation of the function, and if that fails, it checks if it's
        implemented as a compiler-builtin.
        Nzhas function r�  Ú_FzCross variable z is not a boolean.)r  rˆ  z�
        #if defined __stub_{func} || defined __stub___{func}
        fail fail fail this function is not going to work
        #endif
        z#includer  T>   úintel-clÚmsvc©FFÚno_includesÚ
__builtin_Ú
is_builtinr—   aÀ  {prefix}
        int main(void) {{

        /* With some toolchains (MSYS2/mingw for example) the compiler
         * provides various builtins which are not really implemented and
         * fall back to the stdlib where they aren't provided and fail at
         * build/link time. In case the user provides a header, including
         * the header didn't lead to the function being defined, and the
         * function we are checking isn't a builtin itself we assume the
         * builtin is not functional and we just error out. */
        #if !{no_includes:d} && !defined({func}) && !{is_builtin:d}
            #error "No definition for {__builtin_}{func} found in the prefix"
        #endif

        #ifdef __has_builtin
            #if !__has_builtin({__builtin_}{func})
                #error "{__builtin_}{func} not found"
            #endif
        #elif ! defined({func})
            {__builtin_}{func};
        #endif
        return 0;
        }}r*   )Úreplacerã   Ú
propertiesÚhostÚgetr4   r$   r   rì   rž  rœ  ÚlinksÚformatÚget_idr=   )r.   rŸ  r  rš   r  r  ÚvarnameÚvalÚfargsÚ
stubs_failrš  r›  Útemplrf  r„  r§  r  s                    r/   Úhas_functionzCLikeCompiler.has_function
  sÓ  € ð ÐØˆJð " HÑ,ˆØ—/’/ # sÑ+Ô+ˆØŒ=ð 	cØ”.Ô%×)Ò)¨'°4Ñ8Ô8ˆCØˆÝ˜c¥4Ñ(Ô(ð &Ø ˜:Ð%ÝÔ3Ð4aÀgÐ4aÐ4aÐ4aÑbÔbÐbð "¨8Ð4Ð4ˆðˆ
ð ˜ÐÐØ×3Ò3Ñ5Ô5‰JˆD�$�$à×1Ò1Ñ3Ô3‰JˆD�$Ø�zÑ! DÑ(ˆà—j’j  ¤Ð!6Ð!6°Ð!6Ð!6¸È
Ø.:ð !ñ <ô <‰ˆˆVàð 	 Ø˜�<Ðð �;Š;‰=Œ=Ð0Ð0Ð0Ø�<ð  *°Ð7ˆˆmÑØ×(Ò(¨Ñ6Ô6ˆ
Ø(ˆˆlÑØ$.Ð@˜b˜b°LˆˆlÑðˆð. �zŠz˜(˜!œ(Ð+Ð+ UÐ+Ð+¨S¸ZØ'3ð ñ 5ô 5ð 	5r1   Úmembernamesc               ó�   — |€g }d                      d„ |D ¦   «         ¦  «        }|› d|› d|› d�}|                      ||||¬¦  «        S )Nr—   c              3  ó"   K  — | ]
}d |› d�V — ŒdS )zfoo.z;
Nr*   )r,   Úmembers     r/   ú	<genexpr>z,CLikeCompiler.has_members.<locals>.<genexpr>u  s.   è è € ÐGÐG°Ð, Ð,Ð,Ð,ÐGÐGÐGÐGÐGÐGr1   z&
        void bar(void) {
            z foo;
            z

        }r  )r§   r  )	r.   rh  rµ  r  rš   r  r  Úmembersr  s	            r/   Úhas_memberszCLikeCompiler.has_membersn  s…   € ð ÐØˆJà—'’'ÐGÐG¸;ÐGÑGÔGÑGÔGˆØð ð àðð ð ðð ð ˆð
 �}Š}˜Q °
Ø*6ð ñ 8ô 8ð 	8r1   c               óD   — |› d|› d�}|                       ||||¬¦  «        S )Nz-
        void bar(void) {
            sizeof(z);
        }r  r  rm  s          r/   Úhas_typezCLikeCompiler.has_type~  sK   € ð ð ð àðð ð ˆð �}Š}˜Q °
Ø*6ð ñ 8ô 8ð 	8r1   c                óú  — d}d|                      ¦   «         z   dz   }|                      t          j        ¦  «        }d}|                      |||dd|j        ¬¦  «        5 }|j        dk    rt          d	|›d
|j        › �¦  «        ‚t          j
                             |j        ¦  «        st          d|›d�¦  «        ‚t          |j        d¦  «        5 }|D ]g}d|z   |v r-t          j        d¦  «          ddd¦  «         ddd¦  «         dS ||v r-t          j        d¦  «          ddd¦  «         ddd¦  «         dS Œh	 ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   t          d|›d�¦  «        ‚)z�
        Check if symbols have underscore prefix by compiling a small test binary
        and then searching the binary for the string,
        s   meson_uscore_prefixzD#ifdef __cplusplus
        extern "C" {
        #endif
        void zG (void) {}
        #ifdef __cplusplus
        }
        #endif
        Ú)_symbols_have_underscore_prefix_searchbinr‚  T)r  rõ   rI  r~  r   zBUG: Unable to compile z check: z'BUG: Can't find compiled test code for z checkr©   ó   _z9Underscore prefix check found prefixed function in binaryNz=Underscore prefix check found non-prefixed function in binaryFzBUG: z+ check did not find symbol string in binary)Údecoder@  r   ræ   rM  rƒ  rë   ÚRuntimeErrorrÞ   rQ   rR   r¦   rP  r®   r	   rß   )	r.   rš   Úsymbol_namerÖ   rq   ÚnrQ  ÚoÚlines	            r/   r¿  z7CLikeCompiler._symbols_have_underscore_prefix_searchbinˆ  s”  € ð
 -ˆðð ×%Ò%Ñ'Ô'ñ(ð+ñˆð ×+Ò+Õ,<Ô,DÑEÔEˆØ7ˆØ× Ò   s°tÀ)ÐY]ÐhkÔhwÐ ÑxÔxð 	%Ð|}ØŒ|˜qÒ Ð Ý"Ð#T¸QÐ#TÐ#TÈ!Ì(Ð#TÐ#TÑUÔUÐUÝ”7—>’> !¤-Ñ0Ô0ð [Ý"Ð#YÈaÐ#YÐ#YÐ#YÑZÔZÐZÝ�a”m TÑ*Ô*ð 
%¨aØð 	%ð 	%�Dð ˜kÑ)¨TÐ1Ð1Ýœ
Ð#^Ñ_Ô_Ð_Ø#ð
%ð 
%ð 
%ñ 
%ô 
%ð 
%ð	%ð 	%ð 	%ñ 	%ô 	%ð 	%ð 	%ð 	%ð %¨Ð,Ð,Ýœ
Ð#bÑcÔcÐcØ$ð
%ð 
%ð 
%ñ 
%ô 
%ð 
%ð	%ð 	%ð 	%ñ 	%ô 	%ð 	%ð 	%ð 	%ð -ð	%ð
%ð 
%ð 
%ñ 
%ô 
%ð 
%ð 
%ð 
%ð 
%ð 
%ð 
%øøøð 
%ð 
%ð 
%ð 
%ð	%ð 	%ð 	%ñ 	%ô 	%ð 	%ð 	%ð 	%ð 	%ð 	%ð 	%øøøð 	%ð 	%ð 	%ð 	%õ  ÐS 1ÐSÐSÐSÑTÔTÐTsO   ÁA2EÃ!EÃ1EÄ	EÄ"EÄ:EÄ<EÅE	ÅEÅE	ÅEÅE#Å&E#úT.Optional[bool]c                ó°  — d}d|› d�}|                       ||dd|j        ¬¦  «        5 }|j        dk    rt          d|j        › �¦  «        ‚|j                             |¦  «        d	                              ¦   «         }t          j        d
|›d�¦  «         |dk    r	 ddd¦  «         dS |dk    r	 ddd¦  «         dS 	 ddd¦  «         dS # 1 swxY w Y   dS )aZ  
        Check if symbols have underscore prefix by querying the
        __USER_LABEL_PREFIX__ define that most compilers provide
        for this. Return if functions have underscore prefix or None
        if it was not possible to determine, like when the compiler
        does not set the define or the define has an unexpected value.
        z""MESON_HAVE_UNDERSCORE_DELIMITER" z¾
        #ifndef __USER_LABEL_PREFIX__
        #define MESON_UNDERSCORE_PREFIX unsupported
        #else
        #define MESON_UNDERSCORE_PREFIX __USER_LABEL_PREFIX__
        #endif
        z MESON_UNDERSCORE_PREFIX
        r  F)rõ   rI  r~  r   zHBUG: Unable to preprocess _symbols_have_underscore_prefix_define check: r(   z@Queried compiler for function prefix: __USER_LABEL_PREFIX__ is "ú"r¡  NTr—   )	rM  rƒ  rë   rÂ  rÝ   Ú	partitionÚrstripr	   rß   )r.   rš   r‡  rÖ   rQ  Úsymbol_prefixs         r/   Ú&_symbols_have_underscore_prefix_definez4CLikeCompiler._symbols_have_underscore_prefix_defineª  s‰  € ð 5ˆðð 
ðð ð ˆð × Ò   s°È5Ð[^Ô[jÐ ÑkÔkð 	ÐopØŒ|˜qÒ Ð Ý"Ð#xÐnoÔnvÐ#xÐ#xÑyÔyÐyØœH×.Ò.¨uÑ5Ô5°bÔ9×@Ò@ÑBÔBˆMåŒJÐlÐZgÐlÐlÐlÑmÔmÐmØ Ò#Ð#Øð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð  "Ò$Ð$Øð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   ¨A4CÂ)CÂ=CÃCÃCc                ó¼   — |j         | j                 }|                     ¦   «         rdS |                     ¦   «         s|                     ¦   «         r|j        dk    S dS )zË
        Check if symbols have underscore prefix by consulting a hardcoded
        list of cases where we know the results.
        Return if functions have underscore prefix or None if unknown.
        TÚx86N)Úmachinesr*  Ú	is_darwinÚ
is_windowsÚ	is_cygwinÚ
cpu_family)r.   rš   Úms      r/   Ú$_symbols_have_underscore_prefix_listz2CLikeCompiler._symbols_have_underscore_prefix_listÈ  sY   € ð ŒL˜Ô)Ô*ˆà�;Š;‰=Œ=ð 	Ø�4à�<Š<‰>Œ>ð 	)˜QŸ[š[™]œ]ð 	)Ø”< 5Ò(Ð(Øˆtr1   c                ó�   — |                       |¦  «        }|�|S |                      |¦  «        }|�|S |                      |¦  «        S )zR
        Check if the compiler prefixes an underscore to global C symbols
        )rÍ  rÖ  r¿  )r.   rš   Úresults      r/   Úsymbols_have_underscore_prefixz,CLikeCompiler.symbols_have_underscore_prefix×  sX   € ð
 ×<Ò<¸SÑAÔAˆØÐØˆMð ×:Ò:¸3Ñ?Ô?ˆØÐØˆMð ×=Ò=¸cÑBÔBÐBr1   ÚprefixesÚsuffixesÚsharedc                óÚ   — g }|D ]"}|D ]}|                      |dz   |z   ¦  «         ŒŒ#|rA|j        | j                                      ¦   «         r|D ]}|                      |dz   ¦  «         Œ|S )Nz{}.z{}.so.[0-9]*.[0-9]*)r­   rÐ  r*  Ú
is_openbsd)r.   rš   rÚ  rÛ  rÜ  ÚpatternsrQ  Úss           r/   Ú_get_patternszCLikeCompiler._get_patternsê  s�   € ØˆØð 	/ð 	/ˆAØð /ð /�Ø—’  E¡	¨A¡Ñ.Ô.Ð.Ð.ð/àð 		;�c”l 4Ô#3Ô4×?Ò?ÑAÔAð 		;ð ð ;ð ;�Ø—’ Ð$9Ñ 9Ñ:Ô:Ð:Ð:Øˆr1   Úlibtyper   ÚstrictúT.Tuple[str, ...]c           	     óÂ  ‡— dg}|rt          | t          ¦  «        sdg}nddg}|j        | j                                      ¦   «         rddg}nz|j        | j                                      ¦   «         r$t          | t          ¦  «        rdg}ng d¢}|dgz  }n2|j        | j                                      ¦   «         rddg}d	g|z   }ndg}|t          j        u rP|  	                    |||d
¦  «        Š‰ 
                    ˆfd„|  	                    |||d¦  «        D ¦   «         ¦  «         n­|t          j        u rP|  	                    |||d¦  «        Š‰ 
                    ˆfd„|  	                    |||d
¦  «        D ¦   «         ¦  «         nO|t          j        u r|  	                    |||d
¦  «        Šn(|t          j        u sJ ‚|  	                    |||d¦  «        Št          ‰¦  «        S )zg
        Get library prefixes and suffixes for the target platform ordered by
        priority
        ÚaÚlibr—   ÚdylibrR  )údll.arç  Údllrê  ré  ÚcygTc                ó   •— g | ]}|‰v¯|‘Œ	S r*   r*   ©r,   r!  rß  s     €r/   r0   z4CLikeCompiler.get_library_naming.<locals>.<listcomp>  s%   ø€ ÐpÐpÐp 1Ð^_ÐgoÐ^oÐ^o˜QÐ^oÐ^oÐ^or1   Fc                ó   •— g | ]}|‰v¯|‘Œ	S r*   r*   rí  s     €r/   r0   z4CLikeCompiler.get_library_naming.<locals>.<listcomp>!  s%   ø€ ÐoÐoÐo 1Ð]^ÐfnÐ]nÐ]n˜QÐ]nÐ]nÐ]nr1   )r4   r   rÐ  r*  rÑ  rÒ  rÓ  r   ÚPREFER_SHAREDrá  ÚextendÚPREFER_STATICÚSHAREDÚSTATICÚtuple)r.   rš   râ  rã  ÚstlibextrÚ  Úshlibextrß  s          @r/   Úget_library_namingz CLikeCompiler.get_library_namingû  s#  ø€ ð
 �5ˆð
 ð 	#�* TÕ+CÑDÔDð 	#Ø�wˆHˆHà˜r�{ˆHàŒ<˜Ô(Ô)×3Ò3Ñ5Ô5ð 	Ø �ˆHˆHØŒ\˜$Ô*Ô+×6Ò6Ñ8Ô8ð 	õ ˜$Õ 8Ñ9Ô9ð 3Ø!˜7��à2Ð2Ð2�à˜˜ÑˆHˆHØŒ\˜$Ô*Ô+×5Ò5Ñ7Ô7ð 	Ø˜wÐ'ˆHØ�w Ñ)ˆHˆHð �vˆHà•gÔ+Ð+Ð+Ø×)Ò)¨#¨x¸À4ÑHÔHˆHØ�OŠOÐpÐpÐpÐp¨×(:Ò(:¸3ÀÈ(ÐTYÑ(ZÔ(ZÐpÑpÔpÑqÔqÐqÐqØ�Ô-Ð-Ð-Ø×)Ò)¨#¨x¸À5ÑIÔIˆHØ�OŠOÐoÐoÐoÐo¨×(:Ò(:¸3ÀÈ(ÐTXÑ(YÔ(YÐoÑoÔoÑpÔpÐpÐpØ�œÐ&Ð&Ø×)Ò)¨#¨x¸À4ÑHÔHˆHˆHà�gœnÐ,Ð,Ð,Ð,Ø×)Ò)¨#¨x¸À5ÑIÔIˆHÝ�X‰ŒÐr1   Úlibsc                ó  — g }| D ]i}|                      dd¬¦  «        }t          |¦  «        dk    rŒ-	 t          |d         ¦  «         n# t          $ r Y ŒPw xY w|                     |¦  «         Œjd„ }t          ||d¬¦  «        S )Nú.so.r   ©Úmaxsplitr   c                óV   — t          |                      dd¬¦  «        d         ¦  «        S )Nrú  r   rû  )Úfloaträ   )r!  s    r/   ú<lambda>z4CLikeCompiler._sort_shlibs_openbsd.<locals>.<lambda>6  s#   € �e A§H¢H¨V¸a HÑ$@Ô$@ÀÔ$CÑDÔD€ r1   T)ÚkeyÚreverse)rä   r>   rþ  r“  r­   Úsorted)rø  Úfilteredrç  ÚretÚ	float_cmps        r/   Ú_sort_shlibs_openbsdz"CLikeCompiler._sort_shlibs_openbsd)  s¥   € àˆØð 		!ð 		!ˆCà—*’*˜V¨a�*Ñ0Ô0ˆCÝ�3‰xŒx˜1Š}ˆ}ØðÝ�c˜!”f‘”��øÝð ð ð Ø�ðøøøà�OŠO˜CÑ Ô Ð Ð ØDÐDˆ	Ý�h I°tÐ<Ñ<Ô<Ð<s   ³A	Á	
AÁAÚpatternÚ	directoryÚlibnameúT.List[Path]c                óÖ   — t          |¦  «        |                     |¦  «        z  }d|v r>d„ |                      t          j        t	          |¦  «        ¦  «        ¦  «        D ¦   «         S |gS )NÚ*c                ó,   — g | ]}t          |¦  «        ‘ŒS r*   r   )r,   r!  s     r/   r0   z:CLikeCompiler._get_trials_from_pattern.<locals>.<listcomp>@  s   € ÐQÐQÐQ •D˜‘G”GÐQÐQÐQr1   )r   r­  r  ÚglobrN   )Úclsr  r  r	  r¨   s        r/   Ú_get_trials_from_patternz&CLikeCompiler._get_trials_from_pattern9  sc   € å�‰OŒO˜gŸnšn¨WÑ5Ô5Ñ5ˆà�'ˆ>ˆ>ð RÐQ S×%=Ò%=½d¼iÍÈAÉÌÑ>OÔ>OÑ%PÔ%PÐQÑQÔQÐQØˆsˆ
r1   Úpathsr   c           	     ó¸  — | j         j                             ¦   «         r| j         j                             ¦   «         s|D ]}|                     ¦   «         r|c S Œ|D ]}}|                     ¦   «         sŒt          j        t          |¦  «        ¦  «        }|r| j         j        j        |v r|c S t          j
        d|› d|› d| j         j        j        › �¦  «         Œ~dS )zþ
        We just check whether the library exists. We can't do a link check
        because the library might have unresolved symbols that require other
        libraries. On macOS we check if the library matches our target
        architecture.
        z	Rejected z, supports z
 but need N)rÐ  rª  rÑ  ÚbuildÚis_filer   Údarwin_get_object_archsrN   rÔ  r	   rß   )rš   r  rQ  Úarchss       r/   Ú_get_file_from_listz!CLikeCompiler._get_file_from_listC  sû   € ð Œ|Ô ×*Ò*Ñ,Ô,ð 	°C´LÔ4F×4PÒ4PÑ4RÔ4Rð 	Øð ð �Ø—9’9‘;”;ð Ø�H�H�Hðð ð 	fð 	fˆAØ—9’9‘;”;ð ØÝÔ4µS¸±V´VÑ<Ô<ˆEØð f˜œÔ*Ô5¸Ð>Ð>Ø���å”
Ðd qÐdÐd°UÐdÐdÀcÄlÔFWÔFbÐdÐdÑeÔeÐeÐeØˆtr1   c                ó8   — |                       dd|¦  «        dk    S )zP
        returns true if the output produced is 64-bit, false if 32-bit
        zvoid *r—   r3   )rp  r½   s     r/   Úoutput_is_64bitzCLikeCompiler.output_is_64bit[  s   € ð
 �{Š{˜8 R¨Ñ-Ô-°Ò2Ð2r1   Ú
extra_dirsc                óD  — |s|t           j        u s	|| j        v rsd|z   g}|                      ¦   «         |                      ¦   «         z   }||                      |¦  «        z   }|                      |||d¬¦  «        d         r|S || j        v rd S |                      ||¦  «        }		 |                      |¦  «        rd}
nd}
n# t          j
        t          f$ r d}
Y nw xY wt          j        ||                      ||
¦  «        ¦  «        D ]™}|	D ]”}|                      |||¦  «        }|sŒ|                      ||¦  «        }|sŒ5|                     d¦  «        r2|j                             |¦  «        rt'          j        d|›d	�¦  «         |                     ¦   «         gc c S Œšd S )
Nr   T©r  r  r   r   r   rç  zfind_library(z>) starting in "lib" only works by accident and is not portable)r   rï  Úinternal_libsÚget_linker_always_argsÚget_allow_undefined_link_argsrè   r¬  r÷  r  r   ÚMesonExceptionr'  Ú	itertoolsÚchainrº   r  r  r=   rœ   r	   ÚwarningÚas_posix)r.   r	  rš   r  rÖ   râ  rö   r÷   r  rß  rŸ   r‡   rQ  ÚtrialsÚtrials                  r/   Ú_find_library_realz CLikeCompiler._find_library_realb  s  € ð ð 
	 ­7Ô+@Ð @Ð @Ø˜4Ô-Ð-Ð-Ø˜G‘^Ð$ˆEØ×/Ò/Ñ1Ô1°D×4VÒ4VÑ4XÔ4XÑXˆEØ ×!=Ò!=¸eÑ!DÔ!DÑDˆJà�zŠz˜$ °
È$ˆzÑOÔOÐPQÔRð Ø�à˜$Ô,Ð,Ð,Ø�tð ×*Ò*¨3°Ñ8Ô8ˆð	Ø×#Ò# CÑ(Ô(ð Ø�	�	à�	øøÝÔ'­Ð2ð 	ð 	ð 	ØˆIˆIˆIð	øøøõ ” ¨T×-BÒ-BÀ3È	Ñ-RÔ-RÑSÔSð 
	*ð 
	*ˆAØð 	*ð 	*�Ø×6Ò6°q¸!¸WÑEÔE�Øð ØØ×0Ò0°°fÑ=Ô=�Øð ØØ×%Ò% eÑ,Ô,ð |°´×1FÒ1FÀwÑ1OÔ1Oð |Ý”LÐ!z°Ð!zÐ!zÐ!zÑ{Ô{Ð{ØŸšÑ(Ô(Ð)Ð)Ð)Ð)Ð)Ð)ð	*ð ˆts   Â$B? Â?CÃCc                ó8  — || j         v rg S t          |t          ¦  «        r|g}t          | j        ¦  «        |t          |¦  «        ||f}|| j        vr$|                      |||||¦  «        }|| j        |<   n| j        |         }|€d S |                     ¦   «         S rP   )Úignore_libsr4   rN   rô  râ   Úfind_library_cacher'  r#   )r.   r	  rš   r  rÖ   râ  r   r%  s           r/   Ú_find_library_implz CLikeCompiler._find_library_implŽ  s°   € ð �dÔ&Ð&Ð&ØˆIÝ�j¥#Ñ&Ô&ð 	&Ø$˜ˆJÝ�T”\Ñ"Ô" G­U°:Ñ->Ô->ÀÀgÐNˆØ�dÔ-Ð-Ð-Ø×+Ò+¨G°S¸*ÀdÈGÑTÔTˆEØ+0ˆDÔ# CÑ(Ð(àÔ+¨CÔ0ˆEØˆ=Ø�4Ø�zŠz‰|Œ|Ðr1   c                ó8   — d}|                       |||||¦  «        S ©Nzint main(void) { return 0; }
)r+  )r.   r	  rš   r  râ  rÖ   s         r/   Úfind_libraryzCLikeCompiler.find_libraryŸ  s#   € à/ˆØ×&Ò& w°°ZÀÀwÑOÔOÐOr1   c                óv  — | j         dk    rt          j        d¦  «        ‚|                      d¬¦  «        g d¢z   }||                      ¦   «         z  }||j                             | j        | j        ¦  «        z  }t          j
        dd                     |¦  «        d¦  «         t          j                             ¦   «         }d	|d
<   t          j        ||t           j        ¬¦  «        \  }}}g }|                     d¦  «        D ]6}d|vrŒ|                     |dd…                              ¦   «         ¦  «         Œ7|S )zÛ
        These are usually /Library/Frameworks and /System/Library/Frameworks,
        unless you select a particular macOS SDK with the -isysroot flag.
        You can also add to this by setting -F in CFLAGS.
        Úclangz2Cannot find framework path with non-clang compilerF)Úccache)z-vr!   ú-z#Finding framework path by running: r�  rJ  ÚCÚLC_ALL)rš   Ústdinz(framework directory)Niëÿÿÿ)Úidr   r   Úget_exelistrz   r#  r)  r*  rò   r	   rß   r§   rQ   Úenvironr#   rê   rî   ÚPIPEr†  r­   r’  )r.   rš   ÚcommandsÚos_envr¡  rþ   r  rÆ  s           r/   Úfind_framework_pathsz"CLikeCompiler.find_framework_paths¤  s5  € ð Œ7�gÒÐÝÔ)Ð*^Ñ_Ô_Ð_à×#Ò#¨5Ð#Ñ1Ô1Ð4EÐ4EÐ4EÑEˆØ�D×(Ò(Ñ*Ô*Ñ*ˆà�C”L×2Ò2°4Ô3CÀTÄ]ÑSÔSÑSˆÝŒ
Ð8¸#¿(º(À8Ñ:LÔ:LÈdÑSÔSÐSÝ”—’Ñ"Ô"ˆØˆˆxÑÝÔ(¨°vÅZÄ_ÐUÑUÔU‰
ˆˆ1ˆdØˆØ—J’J˜tÑ$Ô$ð 	-ð 	-ˆDØ&¨dÐ2Ð2Øð �LŠL˜˜d˜s˜dœ×)Ò)Ñ+Ô+Ñ,Ô,Ð,Ð,Øˆr1   Úallow_systemc                ó�   — d}g }|D ]}|d|z   gz  }Œ|rg nddg}|d|gz  }|                       ||||z   d¬¦  «        d         r|S d S )	Nzint main(void) { return 0; }z-Fz-Zz
-L/usr/libz
-frameworkTr  r   )r¬  )	r.   rœ   rš   r  r=  rÖ   Ú	link_argsr‡   r  s	            r/   Ú_find_framework_realz"CLikeCompiler._find_framework_real¿  s„   € Ø-ˆØˆ	Øð 	$ð 	$ˆAØ˜$ ™(˜Ñ#ˆIˆIð (ÐA�R�R¨d°LÐ-Aˆ
Ø�l DÐ)Ñ)ˆ	Ø�:Š:�d˜C¨Z¸)Ñ-CÐTXˆ:ÑYÔYÐZ[Ô\ð 	ØÐØˆtr1   c                ó  — t          |t          ¦  «        r|g}t          | j        ¦  «        |t          |¦  «        |f}|| j        v r| j        |         }n"|                      ||||¦  «        }|| j        |<   |€d S |                     ¦   «         S rP   )r4   rN   rô  râ   Úfind_framework_cacher@  r#   )r.   rœ   rš   r  r=  r   r%  s          r/   Ú_find_framework_implz"CLikeCompiler._find_framework_implÌ  s–   € å�j¥#Ñ&Ô&ð 	&Ø$˜ˆJÝ�T”\Ñ"Ô" D­%°
Ñ*;Ô*;¸\ÐJˆØ�$Ô+Ð+Ð+ØÔ-¨cÔ2ˆEˆEà×-Ò-¨d°C¸À\ÑRÔRˆEØ-2ˆDÔ% cÑ*Øˆ=Ø�4Ø�zŠz‰|Œ|Ðr1   Tc                ó2   — |                       ||||¦  «        S )zš
        Finds the framework with the specified name, and returns link args for
        the same or returns None when the framework is not found.
        )rC  )r.   rœ   rš   r  r=  s        r/   Úfind_frameworkzCLikeCompiler.find_frameworkÚ  s   € ð ×(Ò(¨¨s°JÀÑMÔMÐMr1   r1  r  c                ó   — g S rP   r*   ©r.   r1  r  s      r/   r&  z"CLikeCompiler.get_crt_compile_argsã  ó   € àˆ	r1   c                ó   — g S rP   r*   rG  s      r/   Úget_crt_link_argszCLikeCompiler.get_crt_link_argsç  rH  r1   c                ó€   — |j         | j                 }|                     ¦   «         s|                     ¦   «         rg S dgS )Nr"   )rÐ  r*  Úis_haikurÑ  )r.   rš   Úhost_ms      r/   Úthread_flagszCLikeCompiler.thread_flagsë  sC   € à”˜dÔ.Ô/ˆØ�?Š?ÑÔð 	 × 0Ò 0Ñ 2Ô 2ð 	ØˆIØˆ|Ðr1   c                ó*   — |                      ¦   «         S rP   )r#   rt   s     r/   rè   z%CLikeCompiler.linker_to_compiler_argsò  s   € Ø�yŠy‰{Œ{Ðr1   c                ó4   — |                       ||||¬¦  «        S )Nr}  r  )r.   rq   rš   rÖ   rõ   s        r/   Úhas_argumentszCLikeCompiler.has_argumentsõ  s   € à�}Š}˜T 3°4¸dˆ}ÑCÔCÐCr1   c                ó.  — g }|D ]x}|                      d¦  «        r |                     d|dd …         z   ¦  «         |                      d¦  «        rt          j        |› d�¦  «         |                     |¦  «         Œy|                      |||d¬¦  «        S )Nz-Wno-z-Wrª   z-Wl,a9   looks like a linker argument, but has_argument and other similar methods only support checking compiler arguments. Using them to check linker arguments are never supported, and results are likely to be wrong regardless of the compiler you are using. has_link_argument or other similar method can be used instead.r‚  r|  )r=   r­   r	   r#  rQ  )r.   rq   rš   rÖ   Únew_argsrM   s         r/   Ú_has_multi_argumentsz"CLikeCompiler._has_multi_argumentsù  s¾   € ØˆØð 	!ð 	!ˆCð �~Š~˜gÑ&Ô&ð 0Ø—’  s¨1¨2¨2¤w¡Ñ/Ô/Ð/Ø�~Š~˜fÑ%Ô%ð JÝ” ð Ið Ið Iñ Jô Jð Jð �OŠO˜CÑ Ô Ð Ð Ø×!Ò! (¨C°¸IÐ!ÑFÔFÐFr1   c                ó0   — |                       ||d¦  «        S )Nzextern int i;
int i;
)rT  ©r.   rq   rš   s      r/   Úhas_multi_argumentsz!CLikeCompiler.has_multi_arguments  s   € Ø×(Ò(¨¨sÐ4MÑNÔNÐNr1   c                ó–   — | j                              ¦   «         |z   }|                      |¦  «        }|                      |||d¬¦  «        S )NrH  r|  )r7   Úfatal_warningsrè   rQ  )r.   rq   rš   rÖ   s       r/   Ú_has_multi_link_argumentsz'CLikeCompiler._has_multi_link_arguments  sL   € ð Œ{×)Ò)Ñ+Ô+¨dÑ2ˆØ×+Ò+¨DÑ1Ô1ˆØ×!Ò! $¨¨T¸Ð!Ñ?Ô?Ð?r1   c                ó0   — |                       ||d¦  «        S r-  )rZ  rV  s      r/   Úhas_multi_link_argumentsz&CLikeCompiler.has_multi_link_arguments  s   € Ø×-Ò-¨d°CÐ9YÑZÔZÐZr1   rà  c                óä   — t          j        d¦  «        }| }|                     |¦  «        }|rBd                     |                     dddd¦  «        ¦  «        }|                     |¦  «        }|°B|S )NzV(?P<pre>.*([^\\]")|^")(?P<str1>([^\\"]|\\.)*)"\s+"(?P<str2>([^\\"]|\\.)*)(?P<post>".*)r—   ÚpreÚstr1Ústr2Úpost)Úrer‚  Úmatchr§   Úgroup)rà  r  r  rÕ  s       r/   r…  z*CLikeCompiler._concatenate_string_literals  su   € å”*ÐvÑwÔwˆØˆØ�MŠM˜#ÑÔˆØð 	#Ø—'’'˜!Ÿ'š' %¨°¸Ñ@Ô@ÑAÔAˆCØ—’˜cÑ"Ô"ˆAð ð 	#ð ˆ
r1   c                ó   — dgS r“   r*   rÉ   s     r/   Ú!get_has_func_attribute_extra_argsz/CLikeCompiler.get_has_func_attribute_extra_args$  s   € ð ˆ{Ðr1   c                óþ   — |j         | j                 }|                     ¦   «         s|                     ¦   «         s|dv rdS |                      |                      |¦  «        ||                      |¦  «        ¬¦  «        S )N>   Ú	dllexportÚ	dllimportr¤  )r  )rÐ  r*  rÒ  rÓ  r  Úattribute_check_funcrf  )r.   rœ   rš   rÕ  s       r/   Úhas_func_attributez CLikeCompiler.has_func_attribute*  s„   € ð ŒL˜Ô)Ô*ˆØ—’‘”ð 	$ !§+¢+¡-¤-ð 	$ØÐ1Ð1Ð1Ø#�|à�}Š}˜T×6Ò6°tÑ<Ô<¸cØ(,×(NÒ(NÈtÑ(TÔ(Tð ñ Vô Vð 	Vr1   c                ó   — dgS )Nz-DNDEBUGr*   rV   s    r/   Úget_disable_assert_argsz%CLikeCompiler.get_disable_assert_args5  s
   € Øˆ|Ðr1   rK   Úsrcc                ó`   •— | j         dk    rdS t          ¦   «                              |¦  «        S )NÚPREPROCESSORT)rõ   ÚsuperÚcan_compile)r.   rn  Ú	__class__s     €r/   rr  zCLikeCompiler.can_compile8  s/   ø€ ð Œ9˜Ò&Ð&Ø�4Ý‰wŒw×"Ò" 3Ñ'Ô'Ð'r1   r   c                óò   — | j         sjt          j        | ¦  «        | _         | j        |                      ¦   «         z   | j         _        d| j         _        | j                             | j         ¦  «         | j         S )Nrp  )ro   r#   râ   Úget_preprocess_to_file_argsrõ   Úmodesr­   rV   s    r/   Úget_preprocessorzCLikeCompiler.get_preprocessor?  sh   € ØÔ ð 	1Ý $¤	¨$¡¤ˆDÔØ(,¬°t×7WÒ7WÑ7YÔ7YÑ(YˆDÔÔ%Ø%3ˆDÔÔ"ØŒJ×Ò˜dÔ/Ñ0Ô0Ð0ØÔ Ð r1   rP   )rg   rh   )rq   rr   r%   r   )r%   r$   )r%   r&   )r€   rN   r%   r&   rY   )r�   rN   r%   r&   )rR   rN   r•   r$   r%   r&   )rš   r›   rœ   rN   r%   r&   )rš   r›   rŸ   r    r%   r¡   )rš   r›   rŸ   r    r%   r&   )rš   r›   r%   r¡   )rš   r›   r%   r&   )rÃ   rN   r·   rN   r%   r&   )rœ   rN   r%   rN   )rÏ   rN   r%   r&   )
rÓ   rN   rÔ   r›   rÕ   rN   rÖ   rN   r%   r×   )rÓ   rN   rÔ   r›   r%   r×   )r  rN   r  rN   rš   r›   r  r	  r  r
  r%   r  )r  rN   r  rN   rš   r›   r  r	  r  r
  r  r$   r%   r  )r  rN   r  rN   r  rN   rš   r›   r  r  r  r
  r%   r  )rš   r›   rõ   r   r%   r  )
rš   r›   r  r5  r  r
  rõ   r   r%   r6  )
rÖ   rD  rš   r›   r  rE  r  r
  r%   rF  )rT  rN   r  rN   rš   r›   r  r  r  r
  r%   r$   )NN)rT  rN   rX  r    rY  r    rZ  r    r  rN   rš   r›   r  r  r  r
  r%   r°   )rh  rN   r  rN   rš   r›   r  r  r  r
  r%   r°   )rh  rN   r  rN   rš   r›   r  rq  r  r
  r%   r°   rX   )rx  rN   r  rN   rš   r›   r  ry  r  r
  r  r$   r%   rz  )rŠ  rN   r‹  rN   r  rN   rš   r›   r  rq  r  r
  r%   rŒ  )r%   r—  )rŸ  rN   r  rN   rš   r›   r  rq  r  r
  r%   r  )rh  rN   rµ  r&   r  rN   rš   r›   r  r  r  r
  r%   r  )rh  rN   r  rN   rš   r›   r  ry  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  rN   r  rN   r	  rN   r%   r
  )rš   r›   r  r
  r%   r   )r	  rN   rš   r›   r  r&   rÖ   rN   râ  r   r%   rq  )
r	  rN   rš   r›   r  r&   râ  r   r%   rq  )
rœ   rN   rš   r›   r  r&   r=  r$   r%   rq  )T)r1  rN   r  rN   r%   r&   )rq   r&   r%   r&   )
rq   r&   rš   r›   rÖ   rN   rõ   rN   r%   r  )rq   r&   rš   r›   rÖ   rN   r%   r  )rq   r&   rš   r›   r%   r  )rà  rN   r%   rN   )rœ   rN   r%   r&   )rœ   rN   rš   r›   r%   r  )rn  rD  r%   r$   )r%   r   )erZ   r[   r\   Ú__doc__ÚTÚTYPE_CHECKINGr‚   r*  rB  r   ÚUNIXY_COMPILER_INTERNAL_LIBSr  rp   ru   rw   rz   r|   r   rƒ   r…   rˆ   rŠ   rŒ   rŽ   r‘   r”   r™   rž   rc   rd   r¸   rº   r¾   rÀ   rÂ   rÆ   rÊ   r<   rÎ   rÒ   r  r  r  r  r  rç   r   ræ   rC  rï   rW  rb  rg  rn  rp  rt  rw  r‰  r–  rb   rœ  rž  r´  r»  r½  r¿  rÍ  rÖ  rÙ  rá  r÷  r  Úclassmethodr  r  r  r'  r+  r   rï  r.  r<  r@  rC  rE  r&  rJ  rN  rè   rQ  rT  rW  rZ  r\  r…  rf  rk  rm  rr  rw  Ú__classcell__)rs  s   @r/   rf   rf   †   sò  ø€ € € € € à2Ð2à„ð Øˆ	ð ÐØÐØÔ8€Mð
7ð 
7ð 
7ð 
7ð 
7ð-ð -ð -ð -ð -ðð ð ð ð)ð )ð )ð )ðð ð ð ðð ð ð ð%ð %ð %ð %ðð ð ð ðð ð ð ðð ð ð ðð ð ð ðð ð ð ð"ð "ð "ð "ðð ð ð ðð ð ð ðð ð ð ð €YÔÑÔà7;ð%ð %ð %ð %ñ Ôð%ðP 7;ð=ð =ð =ð =ð =ð €YÔÑÔð7ð 7ð 7ñ Ôð7ð2ð 2ð 2ð 2ðð ð ð ð6ð 6ð 6ð 6ðDð Dð Dð Dðð ð ð ð4ð 4ð 4ð 4ð;ð ;ð ;ð ;ð6Kð 6Kð 6Kð 6KðpVð Vð Vð Vð
 nrØFJð8ð 8ð 8ð 8ð 8ð 8ð lpØDHØ).ðhð hð hð hð hð hð" quØKOð8ð 8ð 8ð 8ð 8ð 8ð &ð &ð &ð &ðV 5EÔ4Lð'ð 'ð 'ð 'ð 'ðT cgØ=Að@ð @ð @ð @ð @ð @ð4;ð ;ð ;ð ;ð quØKOð-ð -ð -ð -ð -ðd FJðð ð ð ð ð ð. lpØFJðvð vð vð vð vð vð" fjØ@Dðð ð ð ð ð ð. ?CØIMðzð zð zð zð zð zð. 9=ØCGðð ð ð ð ð ðB */ð`ð `ð `ð `ð `ð2$ð $ð $ð $ð> ð ð  ð  ñ „\ð ðD ðð ð ñ „\ðð* <@ØFJðb5ð b5ð b5ð b5ð b5ð b5ðL koØEIð8ð 8ð 8ð 8ð 8ð 8ð$ CGð8ð 8ð 8ð 8ð 8ð 8ð Uð  Uð  Uð  UðDð ð ð ð<ð ð ð ðCð Cð Cð Cð&ð ð ð ð ð",ð ,ð ,ð ,ð ,ð\ ð=ð =ð =ñ „\ð=ð ðð ð ñ „[ðð ðð ð ñ „\ðð. €YÔÑÔð3ð 3ð 3ñ Ôð3ð*ð *ð *ð *ðXð ð ð ð$ )0Ô(=ðPð Pð Pð Pð Pð
ð ð ð ð6ð ð ð ðð ð ð ð -1ðNð Nð Nð Nð Nðð ð ð ðð ð ð ðð ð ð ðð ð ð ðDð Dð Dð DðGð Gð Gð Gð&Oð Oð Oð Oð@ð @ð @ð @ð[ð [ð [ð [ð ðð ð ñ „\ððð ð ð ð	Vð 	Vð 	Vð 	Vðð ð ð ð €YÔ Ð&Ñ&Ô&ð(ð (ð (ð (ð (ñ 'Ô&ð(ð!ð !ð !ð !ð !ð !ð !ð !r1   rf   )/Ú
__future__r   r;  rc   r  r!  rQ   rb  rî   r#   Útypingry  Úpathlibr   r—   r   r   r	   Úlinkersr
   r   r   r   r#  r   r   r   Úvisualstudior   rz  r  r   Ú_typingr   rÔ   r   Úcompilers.compilersr   r¼   r   Úobjectr‚  ÚXr9   ÚCompilerArgsr   rf   r*   r1   r/   ú<module>rˆ     sG  ðð #Ð "Ð "Ð "Ð "Ð "ðð Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø 	€	€	€	Ø 	€	€	€	Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø (Ð (Ð (Ð (Ð (Ð (Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2à„?ð Ø*Ð*Ð*Ð*Ð*Ð*Ø0Ð0Ð0Ð0Ð0Ð0Ø*Ð*Ð*Ð*Ð*Ð*Ø/Ð/Ð/Ð/Ð/Ð/Ø+Ð+Ð+Ð+Ð+Ð+Ð+ð €HàˆbŒjð %à&(¤dñ,ô ,€ðELð ELð ELð ELð EL˜Ô,ñ ELô ELð ELðP!ð !ð !ð !ð !�Hñ !ô !ð !ð !ð !r1   