§
    Ä/ögf  ã                   óf  — d Z ddlmZ ddlmZ ddlmZmZmZ dZ	dZ
 ed¦  «         ed¦  «        d	„ ¦   «         ¦   «         Zedd„¦   «         ZdZg d¢Zed„ ¦   «         ZdZed„ ¦   «         ZdZ G d„ dej        ¦  «        Z ed¦  «         ed¦  «        d„ ¦   «         ¦   «         Zed„ ¦   «         Zd
S )z
Various configuration tests.
é    )ÚTask)Úconf)ÚfeatureÚbefore_methodÚafter_methodz†
#ifdef _MSC_VER
#define testEXPORT __declspec(dllexport)
#else
#define testEXPORT
#endif
testEXPORT int lib_func(void) { return 9; }
zÒ
#ifdef _MSC_VER
#define testEXPORT __declspec(dllimport)
#else
#define testEXPORT
#endif
testEXPORT int lib_func(void);
int main(int argc, char **argv) {
	(void)argc; (void)argv;
	return !(lib_func() == 9);
}
Úlink_lib_testÚprocess_sourcec                 ó„  — d„ }g }t          | dd¦  «        r1| j        j                             ¦   «                              ¦   «         g}| j        }|›d|›�}| j        rdpd}| j        } ||d|z   t          ¬¦  «          ||d	|z   t          ¬¦  «          |d
|z  d|z   d¬¦  «          ||›d|›�d	|z   dd|¬¦  «         dS )zÊ
	The configuration test :py:func:`waflib.Configure.run_build` declares a unique task generator,
	so we need to create other task generators from here to check if the linker is able to link libraries.
	c                 óZ   — | j         d                              | j        j        ¦  «         d S ©Nr   )ÚoutputsÚwriteÚ	generatorÚcode)Útasks    ú-/git_repos/lvtk-1.2.0/waflib/Tools/c_tests.pyÚwrite_test_filez*link_lib_test_fun.<locals>.write_test_file*   s'   € Ø„,ˆq„/×Ò˜œÔ+Ñ,Ô,Ð,Ð,Ð,ó    Ú	add_rpathFú Ú	test_execÚ ztest.)ÚruleÚtargetr   zmain.z%sshlibÚtest)ÚfeaturesÚsourcer   zprogram Úapp)r   r   r   ÚuseÚrpathN)	ÚgetattrÚbldÚpathÚget_bldÚabspathÚmoder   ÚLIB_CODEÚ	MAIN_CODE)Úselfr   r    r&   ÚmÚexr"   s          r   Úlink_lib_test_funr,   #   s  € ð-ð -ð -ð 
€ÝˆD�+˜uÑ%Ô%ð .ØŒ8Œ=× Ò Ñ"Ô"×*Ò*Ñ,Ô,Ð
-€%àŒ	€Ø���d�dÐ€Ø
„nÐ$˜Ð*¨€Ø„x€Ø€ˆ/ '¨D¡.µxÐ@Ñ@Ô@Ð@Ø€ˆ/ '¨D¡.µyÐAÑAÔAÐAØ€ˆi˜!‰m G¨d¡N¸6ÐBÑBÔBÐBØ€    2 2Ð&¨w¸©~ÀeÐQWÐ_dÐeÑeÔeÐeÐeÐer   NTc                 ó^   — |sd}| j         j        rd}|                      g dd||¬¦  «         dS )z§
	Checks if libraries can be linked with the current linker. Uses :py:func:`waflib.Tools.c_tests.link_lib_test_fun`.

	:param mode: c or cxx or d
	:type mode: string
	ÚcÚcxxr   zChecking for libraries)Úcompile_filenamer   Úmsgr&   r   N)ÚenvÚCXXÚcheck)r)   r&   r   s      r   Úcheck_libraryr5   :   sV   € ð 	ð Ø	€$Ø	„X„\ð Ø
€4Ø‡‚ØØØ Ø	Øð ñ ô ð ð ð r   z^
typedef int foo_t;
static %s foo_t static_foo () {return 0; }
%s foo_t foo () {
	return 0;
}
)ÚinlineÚ
__inline__Ú__inlinec                 óŠ  — |                       d¦  «         d|vrd|d<   d|vr| j        j        rdg|d<   ndg|d<   t          D ]j}t          ||fz  |d<   	  | j        di |¤Ž |                      |¦  «         |dk    r|                      d|d	¬
¦  «         |c S # | j        j	        $ r Y Œgw xY w|  
                    d¦  «         dS )až  
	Checks for the right value for inline macro.
	Define INLINE_MACRO to 1 if the define is found.
	If the inline macro is not 'inline', add a define to the ``config.h`` (#define inline __inline__)

	:param define_name: define INLINE_MACRO by default to 1 if the macro is defined
	:type define_name: string
	:param features: by default *c* or *cxx* depending on the compiler present
	:type features: list of string
	zChecking for inlineÚdefine_nameÚINLINE_MACROr   r/   r.   Úfragmentr6   F)Úquotezcould not use inline functionsN© )Ú	start_msgr2   r3   ÚINLINE_VALUESÚINLINE_CODEr4   Úend_msgÚdefineÚerrorsÚConfigurationErrorÚfatal)r)   ÚkwÚxs      r   Úcheck_inlinerI   X   s  € ð ‡‚Ð%Ñ&Ô&Ð&à˜ÐÐØ$€"€]ÑØ�bÐÐØ	„X„\ð Ø�G€2€j�>€>à�E€2€j�>å
ð ð €QÝ ! Q Ñ'€"€Z�.ðØ€4„:ÐÐ�ÐÐÐð ‡<‚<��?„?€?Øˆ8‚m€mØ‡K‚K�˜! 5€KÑ)Ô)Ð)Ø
€8€8€8øð 
ŒÔ	'ð ð ð Ø€8ðøøøð ‡‚Ð,Ñ-Ô-Ð-Ð-Ð-s   ÁBÂB+Â*B+zp#include <unistd.h>
int main(int argc, char **argv) {
	(void)argc; (void)argv;
	return !(sizeof(off_t) >= 8);
}
c                 ó°  — d|vrd|d<   d|vrd|d<   d|vr| j         j        rddg|d<   ndd	g|d<   t          |d
<   d|d<   d}	 | j         j        dk    r | j        di |¤Ž}|rdS n# | j        j        $ r Y nw xY wd|d<   dg|d<   	  | j        di |¤Ž}|                      dd¦  «         |S # | j        j        $ r Y nw xY w|                      d¦  «         dS )a$  
	Checks for large file support and define the macro HAVE_LARGEFILE
	The test is skipped on win32 systems (DEST_BINFMT == pe).

	:param define_name: define to set, by default *HAVE_LARGEFILE*
	:type define_name: string
	:param execute: execute the test (yes by default)
	:type execute: bool
	r:   ÚHAVE_LARGEFILEÚexecuteTr   r/   Ú
cxxprogramr.   Úcprogramr<   zChecking for large file supportr1   Úpez#Checking for -D_FILE_OFFSET_BITS=64z_FILE_OFFSET_BITS=64ÚdefinesÚ_FILE_OFFSET_BITSé@   z#There is no support for large filesNr>   )	r2   r3   ÚLARGE_FRAGMENTÚDEST_BINFMTr4   rD   rE   rC   rF   )r)   rG   Úrets      r   Úcheck_large_filerV   …   so  € ð 	˜ÐÐØ&€"€]ÑØ�RˆˆØ€"€Y�-à�bÐÐØ	„X„\ð &Ø˜LÐ)€2€j�>€>à˜*Ð%€2€j�>å €€J�à.€€E�Ø€ðØ	„XÔ˜TÒ!Ð!Ø	ˆŒÐ	Ð	�bÐ	Ð	€3ð 	ð Ø
ˆ$ðøð 	ŒÔ&ð ð ð Ø€$ðøøøð 3€€E�Ø(Ð)€€I�ðØˆŒ
ÐÐ�RÐÐ€#ð ‡+‚+Ð! 2Ñ&Ô&Ð&Ø	€*øð	 	ŒÔ&ð ð ð Ø€$ðøøøð ‡‚Ð1Ñ2Ô2Ð2Ð2Ð2s$   ÁA& Á&A8Á7A8ÂB, Â,B>Â=B>aÈ  
short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
int use_ascii (int i) {
	return ascii_mm[i] + ascii_ii[i];
}
short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
int use_ebcdic (int i) {
	return ebcdic_mm[i] + ebcdic_ii[i];
}
extern int foo;
c                   ó   — e Zd ZdZdZd„ ZdS )Úgrep_for_endiannesszB
	Task that reads a binary and tries to determine the endianness
	ÚPINKc                 óV  — | j         d                              d¬¦  «                             d¦  «        }|                     d¦  «        dk    r!| j        j                             d¦  «         d S |                     d¦  «        dk    r!| j        j                             d	¦  «         d S dS )
Nr   Úrb)Úflagszlatin-1ÚLiTTleEnDianéÿÿÿÿÚlittleÚBIGenDianSySÚbig)ÚinputsÚreadÚdecodeÚfindr   ÚtmpÚappend)r)   Útxts     r   Úrunzgrep_for_endianness.runÉ   s�   € ØŒ�AŒ×Ò $ÐÑ'Ô'×.Ò.¨yÑ9Ô9€#Ø‡X‚XˆnÑÔ Ò"Ð"Ø„>Ô×Ò˜XÑ&Ô&Ð&Ð&Ð&Ø
‡x‚x�ÑÔ "Ò$Ð$Ø„>Ô×Ò˜UÑ#Ô#Ð#Ð#Ð#à
ˆ"r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úcolorri   r>   r   r   rX   rX   Ä   s4   € € € € € ðð ð 
€ðð ð ð ð r   rX   c                 ó^   — |                       d| j        d         j        d         ¦  «         dS )z-
	Used by the endianness configuration test
	rX   r   N)Úcreate_taskÚcompiled_tasksr   )r)   s    r   Úgrep_for_endianness_funrr   Ò   s1   € ð ×ÒÐ'¨Ô)<¸QÔ)?Ô)GÈÔ)JÑKÔKÐKÐKÐKr   c                 ób   ‡— g Šˆfd„}|                       t          ddd‰|¬¦  «         ‰d         S )z=
	Executes a configuration test to determine the endianness
	c                 ó   •— ‰d         S r   r>   )r)   rf   s    €r   Ú	check_msgz#check_endianness.<locals>.check_msgà   s   ø€ Ø	ˆQŒ€-r   zc grep_for_endiannesszChecking for endiannessÚ
ENDIANNESS)r<   r   r1   rC   rf   Úokmsgr   )r4   ÚENDIAN_FRAGMENT)r)   ru   rf   s     @r   Úcheck_endiannessry   Ú   sX   ø€ ð
 
€ðð ð ð ð à‡‚•_Ð/FØ¨¸#ÀYð ñ Pô Pð PàˆAŒ€r   )NT)rm   Úwaflibr   Úwaflib.Configurer   Úwaflib.TaskGenr   r   r   r'   r(   r,   r5   rA   r@   rI   rS   rV   rx   rX   rr   ry   r>   r   r   ú<module>r}      s©  ðð
ð ð Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?ð€ð€	ð 	€ˆÑÔØ€ÐÑ Ô ðfð fñ !Ô ñ Ôðfð* ðð ð ñ „ðð(€ð 5Ð4Ð4€àð!.ð !.ñ „ð!.ðJ€ð ð,3ð ,3ñ „ð,3ð`€ðð ð ð ð ˜$œ)ñ ô ð ð 	€Ð	ÑÔØ€ÐÑÔðLð Lñ  Ôñ  ÔðLð ð	ð 	ñ „ð	ð 	ð 	r   