§
    Ö)ög|   ã                   ó¦  — d Z ddlmZ ddlZddlZddlZddlmZmZm	Z	m
Z
mZmZmZ ddlmZmZ ddlmZ dZ	 dZd	Zd
Zi dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“d d!“d"d#“d$d#“d%d&“d'd&“d(d)“d*d+i¥Zi d,d-“d.d-“d/d0“d1d2“d3d4“d5d6“d7d8“d9d:“d;d<“d=d>“d?d@“dAdB“dCdB“dDdE“dFdG“dHdI“dJdK“dLdMdNœ¥ZedxdP„¦   «         ZedQ„ ¦   «         ZedR„ ¦   «         ZedS„ ¦   «         ZdT„ ZedU„ ¦   «         ZedV„ ¦   «         ZedW„ ¦   «         Z  G dX„ dYe	j	        ¦  «        Z! edY¦  «         edZ¦  «        d[„ ¦   «         ¦   «         Z"ed\„ ¦   «         Z#ed]„ ¦   «         Z$ed^„ ¦   «         Z%ed_„ ¦   «         Z&edydb„¦   «         Z'edzdc„¦   «         Z(edzdd„¦   «         Z)ede„ ¦   «         Z*edf„ ¦   «         Z+edg„ ¦   «         Z,ed{dh„¦   «         Z-ed|di„¦   «         Z.edj„ ¦   «         Z/edk„ ¦   «         Z0edl„ ¦   «         Z1edm„ ¦   «         Z2edn„ ¦   «         Z3ed}do„¦   «         Z4edp„ ¦   «         Z5edq„ ¦   «         Z6edr„ ¦   «         Z7 G ds„ dte	j	        ¦  «        Z8edu„ ¦   «         Z9ed~dw„¦   «         Z:dS )z
C/C++/D configuration helpers
é    )Úwith_statementN)ÚBuildÚUtilsÚTaskÚOptionsÚLogsÚErrorsÚRunner)Úafter_methodÚfeature©Úconfzconfig.hÚ
define_keyÚinclude_keyzI
int main(int argc, char **argv) {
	(void)argc; (void)argv;
	return 0;
}
Ú	__linux__ÚlinuxÚ__GNU__ÚgnuÚ__FreeBSD__ÚfreebsdÚ
__NetBSD__ÚnetbsdÚ__OpenBSD__ÚopenbsdÚ__sunÚsunosÚ__hpuxÚhpuxÚ__sgiÚirixÚ_AIXÚaixÚ
__CYGWIN__ÚcygwinÚ__MSYS__Ú_UWINÚuwinÚ_WIN64Úwin32Ú_WIN32Ú-__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ÚdarwinÚ.__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__Ú__QNX__ÚqnxÚ__native_client__ÚnaclÚ
__x86_64__Úx86_64Ú	__amd64__Ú__i386__Úx86Ú__ia64__ÚiaÚ__mips__ÚmipsÚ	__sparc__ÚsparcÚ	__alpha__ÚalphaÚ__aarch64__Úaarch64Ú	__thumb__ÚthumbÚ__arm__ÚarmÚ__hppa__ÚhppaÚ__powerpc__ÚpowerpcÚ__ppc__Ú
__convex__ÚconvexÚ__m68k__Úm68kÚ	__s390x__Ús390xÚ__s390__Ús390ÚshÚxtensa)Ú__sh__Ú
__xtensa__Fc                 ó”	  ‡‡— t          |t          ¦  «        sJ ‚‰p| j        Š|€d}d|v rd|v pd|v }t          j        ||¬¦  «        }d|_        d|_        t          |¦  «        }|Šˆˆfd„}ˆˆfd	„}	d
}
|�rO|                     d¦  «        }|dd…         }|dd…         }|dk    s|dk    r%|s|                     d¦  «        } |	d|¦  «         �nð|dk    r1||                     d¦  «        g} |d|¦  «          |d|¦  «         �n¹|dk    s‰j        dk    r+|dk    r%|s|                     d¦  «        } |d|¦  «         �n}|dk    r-|s|                     d¦  «        }|s|
rdnd} |||¦  «         �nJ|dk    r-|s|                     d¦  «        }|s|
rdnd} |	||¦  «         �n| 	                    d¦  «        r*|s|
rdnd} |	|| 
                    dd¦  «        ¦  «         �nØ| 	                    d¦  «        rd|v rdnd} |||¦  «         �n­| 	                    d ¦  «        s|d!v r& |d|¦  «          |d|¦  «          |d"|¦  «         �nn|d#k    r! |	d$|                     d¦  «        ¦  «         �nG| 	                    d%¦  «        r |	d&|dd…         ¦  «         �n|d'k    s|d(k    r4 |d)|                     d¦  «                             d*¦  «        ¦  «         �nÜ| 	                    d+¦  «        r |d)|d,d…         ¦  «         �n±| 	                    d(¦  «        r |d)|d-d…         ¦  «         �n†| 	                    d.¦  «        r |d)|d/d…         ¦  «         �n[|d0k    s|d1k    rd}
�nK|d2k    s|d3k    rd
}
�n;| 	                    d4¦  «        s|d5v r |d"|¦  «         �n| 	                    d6¦  «        r |d|¦  «          |d|¦  «         næ| 	                    d7¦  «        r |d"|¦  «         nÄ| 	                    d8¦  «        r$|                     d¦  «        } |d"||g¦  «         n‹| 	                    d9¦  «        r<||                     d¦  «        g} |d|¦  «          |d|¦  «          |d"|¦  «         n:|                     d:¦  «        r |	d"|¦  «         n|                      d;|z  ¦  «         |�°MdS dS )<aª  
	Parses flags from the input lines, and adds them to the relevant use variables::

		def configure(conf):
			conf.parse_flags('-O3', 'FOO')
			# conf.env.CXXFLAGS_FOO = ['-O3']
			# conf.env.CFLAGS_FOO = ['-O3']

	:param line: flags
	:type line: string
	:param uselib_store: where to add the flags
	:type uselib_store: string
	:param env: config set or conf.env by default
	:type env: :py:class:`waflib.ConfigSet.ConfigSet`
	NTú\z\ z\\)ÚposixÚ c                 ó>   •— ‰                      | ›d‰›�|¦  «         d S ©NÚ_)Úappend_value©ÚvarÚvalÚenvÚuselibs     €€ú//git_repos/midimsg-lv2/waflib/Tools/c_config.pyÚappzparse_flags.<locals>.appm   s*   ø€ Ø×Ò˜c˜c˜c 6 6Ð*¨CÑ0Ô0Ð0Ð0Ð0ó    c                 ó>   •— ‰                      | ›d‰›�|¦  «         d S r[   )Úappend_uniquer^   s     €€rc   Úappuzparse_flags.<locals>.appuo   s*   ø€ Ø×Ò˜s˜s˜s F FÐ+¨SÑ1Ô1Ð1Ð1Ð1re   Fr   é   z-Iz/IÚINCLUDESz-iÚCFLAGSÚCXXFLAGSz-DÚmsvcz/DÚDEFINESz-lÚSTLIBÚLIBz-LÚ	STLIBPATHÚLIBPATHz	/LIBPATH:z-std=z++ú+)z-pthreadz-fPICz-fpicz-fPIEz-fpieÚ	LINKFLAGSz
-frameworkÚ	FRAMEWORKz-FÚFRAMEWORKPATHz
-Wl,-rpathz-Wl,-RÚRPATHz-Wl,z-Wl,-R,é   é   z-Wl,-rpath,é   z-Wl,-Bstaticz-Bstaticz-Wl,-Bdynamicz	-Bdynamicz-Wl)z	-rdynamicz-pie)z-mz-fz-dynamicz-Oz-gz-bundle)z
-undefinedz-Xlinker)z-archz	-isysroot)z.az.soz.dylibz.libzUnhandled flag %r)Ú
isinstanceÚstrra   ÚshlexÚwhitespace_splitÚ
commentersÚlistÚpopÚCXX_NAMEÚ
startswithÚreplaceÚlstripÚendswithÚto_log)ÚselfÚlineÚuselib_storera   Úforce_staticrX   ÚlexÚlstrd   rh   ÚstaticÚxÚstÚotÚtmpÚprefixÚargrb   s      `             @rc   Úparse_flagsr•   I   s$  øø€ õ$ 	�4�ÑÔÐÐÐà
€ˆdŒh€ð 
€MØ
€%Ø	ˆT€\€\Ø�TˆMÐ.˜v¨˜~€5å„{�4˜uÐ%Ñ%Ô%€Ø€ÔØ€„ÝˆC�y„y€ð €ð1ð 1ð 1ð 1ð 1ð 1ð2ð 2ð 2ð 2ð 2ð 2à
€Ø
ñ H(Ø	‡g‚gˆa�j„j€!Øˆˆ!ˆ„u€"Øˆˆˆ„u€"àˆ4‚Z€Z�2˜’:�:Ø
ð Ø	�Š�‰Œ€BØ€4ˆ
�BÑÔÐÑØ	ˆT‚z€zØ
ˆS�WŠW�Q‰ZŒZˆ€3Ø€3€x�ÑÔÐØ€3€z�3ÑÔÐÑØ	ˆT‚z€z�c”l fÒ,Ð,°°t²°Ø
ð Ø	�Š�‰Œ€BØ€3€y�"ÑÔÐÑØ	ˆT‚z€zØ
ð Ø	�Š�‰Œ€BØ$Ð:¨Ð:ˆGˆG°U€6Ø€3€vˆr�?„?€?�?Ø	ˆT‚z€zØ
ð Ø	�Š�‰Œ€BØ(ÐB¨FÐBˆKˆK¸€6Ø€4ˆ�ÑÔÐÑØ‡|‚|�KÑ Ô ð -(Ø(ÐB¨FÐBˆKˆK¸€6Ø€4ˆ�—	’	˜+ rÑ*Ô*Ñ+Ô+Ð+Ñ+Ø‡|‚|�GÑÔð *(Ø !˜)˜)ˆJˆJ¨€6Ø€3€vˆq�>„>€>�>Ø‡|‚|�CÑÔð '(˜AÐ!QÐQÐQØ€3€x�ÑÔÐØ€3€z�1ÑÔÐØ€3€{�AÑÔÐÑØˆLÒÐØ€4ˆ�S—W’W˜Q‘Z”ZÑ Ô Ð Ñ Ø‡|‚|�DÑÔð !(Ø€4ˆ˜˜1˜2˜2œÑÔÐÑØˆLÒÐ˜A šM˜MØ€3€w�—’˜‘
”
×!Ò! &Ñ)Ô)Ñ*Ô*Ð*Ñ*Ø‡|‚|�IÑÔð (Ø€3€w��!�"�"”ÑÔÐÑØ‡|‚|�HÑÔð (Ø€3€w��!�"�"”ÑÔÐÑØ‡|‚|�MÑ"Ô"ð (Ø€3€w��"�#�#”ÑÔÐÑØˆNÒÐ˜a :šo˜oØ€6�6ØˆOÒÐ˜q KÒ/Ð/Ø€6�6Ø‡|‚|�EÑÔð (˜aÐ#8Ð8Ð8Ø€3€{�AÑÔÐÑØ‡|‚|Ð8Ñ9Ô9ð (à€3€x�ÑÔÐØ€3€z�1ÑÔÐÐØ‡|‚|�IÑÔð (Ø€3€{�AÑÔÐÐØ‡|‚|Ð.Ñ/Ô/ð (Ø	�Š�‰Œ€3Ø€3€{�Q˜�HÑÔÐÐØ‡|‚|Ð*Ñ+Ô+ð (Ø
ˆS�WŠW�Q‰ZŒZˆ€3Ø€3€x�ÑÔÐØ€3€z�3ÑÔÐØ€3€{�CÑÔÐÐØ‡z‚zÐ1Ñ2Ô2ð (Ø€4ˆ�QÑÔÐÐà‡;‚;Ð" QÑ&Ñ'Ô'Ð'ðQ ñ H(ð H(ð H(ð H(ð H(re   c                 ó�  — d|vr2| j         j        s|                      dd¬¦  «         | j         j        |d<   d|v d|v z   d|v z   }|dk    rt          d	¦  «        ‚d
|vr4d|v rd|d         z  |d
<   n!d|v rd|d         z  |d
<   nd|d         z  |d
<   d|vr	d|vrd|d<   d|vrd|d<   d|v rdS d|v r7d|vr|d         |d<   d|vr"dt	          j        |d         ¦  «        z  |d<   dS dS d|vr5t	          j        |d         ¦  «        d                              ¦   «         |d<   d|vr |                      |d         ¦  «        |d<   dS dS )aÛ  
	Searches for the program *pkg-config* if missing, and validates the
	parameters to pass to :py:func:`waflib.Tools.c_config.exec_cfg`.

	:param path: the **-config program to use** (default is *pkg-config*)
	:type path: list of string
	:param msg: message to display to describe the test executed
	:type msg: string
	:param okmsg: message to display when the test is successful
	:type okmsg: string
	:param errmsg: message to display in case of error
	:type errmsg: string
	Úpathz
pkg-configÚ	PKGCONFIG)r_   Úatleast_pkgconfig_versionÚ
modversionÚpackageé   zLexactly one of atleast_pkgconfig_version, modversion and package must be setÚmsgz%Checking for pkg-config version >= %rzChecking for %r versionzChecking for %rÚokmsgÚyesÚerrmsgú	not foundrŠ   Údefine_namez
%s_VERSIONr   N)	ra   r˜   Úfind_programÚ
ValueErrorr   Úquote_define_nameÚto_listÚupperÚhave_define)rˆ   ÚkwÚss      rc   Úvalidate_cfgr«   ¼   sà  € ð 	�"ˆˆØ	ŒÔ	ð 4Ø×Ò�\ {ÐÑ3Ô3Ð3ØŒxÔ!€"€V�*ð " RÐ'¨L¸BÐ,>Ñ?À9ÐPRÀ?ÑS€Øˆ‚F€FÝÐaÑbÔbÐbØ�ˆˆØ  BÐ&Ð&Ø6¸Ð<WÔ9XÑX€2€e�9€9Ø�rÐÐØ(¨2¨lÔ+;Ñ;€2€e�9€9à  2 i¤=Ñ1€2€e�9ð 	�2ˆˆ˜l¨bÐ0Ð0Ø€"€W�+Ø�BˆˆØ€"€X�,ð   2Ð%Ð%Ø€$Ø�bÐÐØ	˜2Ð	Ð	Ø˜<Ô(€2€nÑØ	˜"Ð	Ð	Ø#¥eÔ&=¸bÀÔ>PÑ&QÔ&QÑQ€2€mÑÐÐð 
Ð	ð 
˜2Ð	Ð	Ýœ b¨¤mÑ4Ô4°QÔ7×=Ò=Ñ?Ô?€2€nÑØ	˜"Ð	Ð	Ø×'Ò'¨¨>Ô(:Ñ;Ô;€2€mÑÐÐð 
Ð	re   c           	      ód  ‡ ‡— t          j        ‰d         ¦  «        }‰ j        j        pd}‰                     d¦  «        r!|st	          ‰ j        ¦  «        }‰d         |d<   ˆˆ fd„}d‰v r(|d‰d         z  gz   }‰                      ||¬¦  «         dS d	‰v r[‰                      |d
‰d	         gz   |¬¦  «                             ¦   «         }d‰vr|‰d<   ‰                      ‰d         |¦  «         |S g |z   }‰                     d¦  «        }|s‰ j        j	        pi }| 
                    ¦   «         D ] \  }	}
|                     d|	›d|
›�¦  «         Œ!‰                     dd¦  «        }d‰v r)t          j        ‰d         ¦  «        }d|v sd|v rd}||z  }|                     t          j        ‰d         ¦  «        ¦  «         d‰v r~‰                     d‰ j        ¦  «        }t          j        ‰d         ¦  «        }|D ]D}‰                      |d|z   gz   |¬¦  «                             ¦   «         }
‰d         ›d|›�}|
||<   ŒEdS ‰                      ||¬¦  «        } |¦   «          ‰                      |‰d         ‰                     d‰ j        ¦  «        |‰                     d¦  «        ¬¦  «         |S )a¯  
	Executes ``pkg-config`` or other ``-config`` applications to collect configuration flags:

	* if atleast_pkgconfig_version is given, check that pkg-config has the version n and return
	* if modversion is given, then return the module version
	* else, execute the *-config* program with the *args* and *variables* given, and set the flags on the *conf.env.FLAGS_name* variable

	:param atleast_pkgconfig_version: minimum pkg-config version to use (disable other tests)
	:type atleast_pkgconfig_version: string
	:param package: package name, for example *gtk+-2.0*
	:type package: string
	:param uselib_store: if the test is successful, define HAVE\_*name*. It is also used to define *conf.env.FLAGS_name* variables.
	:type uselib_store: string
	:param modversion: if provided, return the version of the given module and define *name*\_VERSION
	:type modversion: string
	:param args: arguments to give to *package* when retrieving flags
	:type args: list of string
	:param variables: return the values of particular variables
	:type variables: list of string
	:param define_variable: additional variables to define (also in conf.env.PKG_CONFIG_DEFINES)
	:type define_variable: dict(string: string)
	r—   NÚpkg_config_pathÚPKG_CONFIG_PATHc                  ó  •— ‰d         } ‰                      dd¦  «        r‰                     | dd¦  «         n'‰j                             d‰d         z  d| z  ¦  «         ‰                      dd¦  «        rd‰j        | <   d S d S )	Nr¢   Úglobal_definerœ   Fú
DEFINES_%srŠ   z%s=1Úadd_have_to_env)ÚgetÚdefinera   rg   )r¢   r©   rˆ   s    €€rc   Ú	define_itzexec_cfg.<locals>.define_it  s—   ø€ Ø�=Ô!€+à‡V‚VˆO˜QÑÔð SØ‡;‚;ˆ{˜A˜uÑ%Ô%Ð%Ð%à„8×Ò˜,¨¨NÔ);Ñ;¸VÀkÑ=QÑRÔRÐRà‡V‚VÐ˜qÑ!Ô!ð Ø€4„8ˆKÑÐÐðð re   r™   z--atleast-pkgconfig-version=%s©ra   rš   z--modversionrž   r¢   Údefine_variablez--define-variable=ú=r‹   FÚargsz--staticz--static-libsTr›   Ú	variablesra   z--variable=rŠ   r\   rX   )r‹   rX   )r   r¦   ra   r³   ÚdictÚenvironÚcmd_and_logÚstripr´   ÚPKG_CONFIG_DEFINESÚitemsÚappendÚextendr•   )rˆ   r©   r—   ra   rµ   ÚcmdÚversionr�   ÚdefiÚkeyr`   rŽ   r¹   Úv_envÚvarsÚvr_   Úrets   ``                rc   Úexec_cfgrË   ð   s$  øø€ õ2 	Œ�b˜”jÑ!Ô!€Ø„x„|Ð�t€Ø‡F‚FÐÑÔð 1Ø	ð Ý	ˆdŒlÑ	Ô	€3ØÐ/Ô0€#ÐÑð	ð 	ð 	ð 	ð 	ð 	ð   2Ð%Ð%ØÐ0°2Ð6QÔ3RÑRÐSÑS€#Ø×Ò�3˜CÐÑ Ô Ð Ø€&ð �BÐÐØ×Ò˜T ^°R¸Ô5EÐ$FÑFÈCÐÑPÔP×VÒVÑXÔX€'Ø	�BˆˆØ€2€g�;Ø‡+‚+ˆb�Ô Ñ)Ô)Ð)Ø	€.à	ˆD�y€à
�ŠÐ Ñ!Ô!€Øð +Ø	ŒÔ	$Ð	*¨€$Ø—’‘”ð 5ð 5�X€Sˆ#Ø‡*‚*€*¨#¨#¨#¨s¨sÐ3Ñ4Ô4Ð4Ð4à
�&Š&� Ñ
'Ô
'€Ø
ˆb€L€LÝ	Œ�r˜&”zÑ	"Ô	"€$Ø�4ÐÐ˜?¨dÐ2Ð2Ø€6Øˆ�+€#ð ‡‚�EŒM˜"˜Yœ-Ñ(Ô(Ñ)Ô)Ð)ð �2ÐÐØ
�&Š&�˜œÑ
!Ô
!€%Ý	Œ�r˜+”Ñ	'Ô	'€$Øð ð €aØ	×	Ò	˜# °Ñ!2Ð 3Ñ3¸Ð	Ñ	=Ô	=×	CÒ	CÑ	EÔ	E€3Ø�~Ô&Ð&Ð&¨¨Ð	*€3Ø€5ˆ�:€:Ø€&ð ×Ò˜ ÐÑ%Ô%€à
€�„€Ø×Ò�#�r˜.Ô)¨2¯6ª6°%¸¼Ñ+BÔ+BÐQWÐ_a×_eÒ_eÐfmÑ_nÔ_nÐÑoÔoÐoØ€re   c                 óà  — |                       |¦  «         d|v r | j        |d         fi |¤Ž d}	 |                      |¦  «        }|sd}||d<   d|v r( | j        |                      |d         |¦  «        fi |¤Ž nr# | j        j        $ r`}d|v r | j        |d         dfi |¤Ž t          j        dk    r|  	                    d	|z  ¦  «         |  
                    d
¦  «         Y d}~nd}~ww xY w|S )aÕ  
	Checks for configuration flags using a **-config**-like program (pkg-config, sdl-config, etc).
	This wraps internal calls to :py:func:`waflib.Tools.c_config.validate_cfg` and :py:func:`waflib.Tools.c_config.exec_cfg`

	A few examples::

		def configure(conf):
			conf.load('compiler_c')
			conf.check_cfg(package='glib-2.0', args='--libs --cflags')
			conf.check_cfg(package='pango')
			conf.check_cfg(package='pango', uselib_store='MYPANGO', args=['--cflags', '--libs'])
			conf.check_cfg(package='pango',
				args=['pango >= 0.1.0', 'pango < 9.9.9', '--cflags', '--libs'],
				msg="Checking for 'pango 0.1.0'")
			conf.check_cfg(path='sdl-config', args='--cflags --libs', package='', uselib_store='SDL')
			conf.check_cfg(path='mpicc', args='--showme:compile --showme:link',
				package='', uselib_store='OPEN_MPI', mandatory=False)
			# variables
			conf.check_cfg(package='gtk+-2.0', variables=['includedir', 'prefix'], uselib_store='FOO')
			print(conf.env.FOO_includedir)
	r�   NTÚsuccessrž   r    ÚYELLOWrœ   zCommand failure: %súThe configuration failed)r«   Ú	start_msgrË   Úend_msgÚret_msgÚerrorsÚWafErrorr   Úverboser‡   Úfatal)rˆ   Úkr©   rÊ   Úes        rc   Ú	check_cfgrÙ   L  sE  € ð. ×Ò�2ÑÔÐØ	ˆR€K€KØ€$„.��E”Ð!Ð!˜bÐ!Ð!Ð!Ø€ð5Ø�Š�bÑÔ€#ð 
ð Ø	€3Ø€"€Y�-Ø�€]€]Ø€4„<�—’˜R œ[¨"Ñ-Ô-Ð4Ð4°Ð4Ð4Ð4øøð 	ŒÔð )ð )ð )Ø�€^€^Ø€4„<��8”˜hÐ-Ð-¨"Ð-Ð-Ð-Ý	„\�AÒÐØ‡;‚;Ð$ qÑ(Ñ)Ô)Ð)Ø‡*‚*Ð'Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(øøøøð)øøøð 	€s   ±A< Á<C+ÂAC&Ã&C+c                 óÚ  — | j         d         rE| j                             | j         d         ¦  «        }|                     | j         d         ¦  «          | | j         d         | j         d         d¬¦  «        }| j                              ¦   «         D ]\  }}t          |||¦  «         Œ| j                              d¦  «        s*| j                             d| j         d         z  ¦  «         dS dS )	zU
	Build function that is used for running configuration tests with ``conf.check()``
	Úcompile_filenameÚcodeÚfeaturesÚtestprog)rÝ   ÚsourceÚtargetÚquietz
==>
%s
<==N)	r©   ÚsrcnodeÚ	make_nodeÚwriterÀ   Úsetattrr³   r   r‡   )ÚbldÚnodeÚor×   rÉ   s        rc   Ú	build_funré   x  sæ   € ð „FÐÔð Ø	Œ×	Ò	˜sœvÐ&8Ô9Ñ	:Ô	:€$Ø‡*‚*ˆSŒV�FŒ^ÑÔÐà€S�#”&˜Ô$¨S¬VÐ4FÔ-GÐPZÐ[Ñ[Ô[€àŒV�\Š\‰^Œ^ð ð �T€QˆÝ	ˆ!ˆQ�ÑÔÐÐàŒ�
Š
�7ÑÔð 3Ø„(‡/‚/�. 3¤6¨&¤>Ñ1Ñ2Ô2Ð2Ð2Ð2ð3ð 3re   c                 óÐ	  — dD ]}||v rt          j        d|z  ¦  «         Œd|vr
t          |d<   d|vr| j                             ¦   «         |d<   |d         }d|vrwd|vrsd|d<   |j        rFt          j                             d¦  «        r'd|d<   | j        j	        s|  
                    d	¦  «         n!| j        j        s|  
                    d
¦  «         d|vrMd|d<   dt          j        |                     dg ¦  «        ¦  «        v s|                     d¦  «        dk    rd|d<   d|vrd|d<   d|vr;d|vs|                     dd¦  «        r|d         |d         g|d<   n*|d         g|d<   nt          j        |d         ¦  «        |d<   d|vrd|d         dk    rdpdz   |d<   d„ }d|v rž|d         }d|vr|                     ¦   «         |d<   |                     d¦  «        sX|›d|›d�}|                     d¦  «        r
|dd…         }|                     dg ¦  «        }t          j        |¦  «        |gz   |d<   d|z  |d<   ||d <   n¢d|v ržd|vrd!|d         z  |d<   t          j        |d         ¦  «        }t          |¦  «        s
J d"¦   «         ‚ ||¦  «        t           z   |d#<   d|vr|d$                              ¦   «         |d<   d%|vr|                      |d$         ¦  «        |d%<   d&|v r3d|vrd'|d&         z  |d<   d|vr|d&                              ¦   «         |d<   d(|v r3d|vrd)|d(         z  |d<   d|vr|d(                              ¦   «         |d<   d*|v r|d*         |d#<   d|vrd+|d<   d,|vrd-|d,<   d.D ]'\  }	}
|	|v rd|vrd/|
›d0||	         ›�|d<   d,|vrd-|d,<   Œ(d1|vrd2|d1<   |d1         r*|d                              d3¦  «         t          j        |d4<   d,|vrd5|d,<   d6|vrd7|d6<   d#|vr
t           |d#<   | j        t(                   r>d8                     d9„ | j        t(                   D ¦   «         ¦  «        d8z   |d#         z   |d#<   |                     d:¦  «        s|j        r)|                      ¦   «         ›d;|d#         ›�|d#<   g |_        |                     d<¦  «        sd|d<<   d%|v r|                      |d%         ¦  «         d|vr|  
                    d=¦  «         dS dS )>a  
	Pre-checks the parameters that will be given to :py:func:`waflib.Configure.run_build`

	:param compiler: c or cxx (tries to guess what is best)
	:type compiler: string
	:param type: cprogram, cshlib, cstlib - not required if *features are given directly*
	:type type: binary to create
	:param feature: desired features for the task generator that will execute the test, for example ``cxx cxxstlib``
	:type feature: list of string
	:param fragment: provide a piece of code for the test (default is to let the system create one)
	:type fragment: string
	:param uselib_store: define variables after the test is executed (IMPORTANT!)
	:type uselib_store: string
	:param use: parameters to use for building (just like the normal *use* keyword)
	:type use: list of string
	:param define_name: define to set when the check is over
	:type define_name: string
	:param execute: execute the resulting binary
	:type execute: bool
	:param define_ret: if execute is set to True, use the execution output in both the define and the return value
	:type define_ret: bool
	:param header_name: check for a particular header
	:type header_name: string
	:param auto_add_header_name: if header_name was set, add the headers in env.INCKEYS so the next tests will include these headers
	:type auto_add_header_name: bool
	)Ú	type_nameÚ
field_nameÚfunction_namezInvalid argument %r in testré   ra   ÚcompilerrÝ   ÚcÚcxxza c++ compiler is requiredza c compiler is requiredÚcompile_modeÚtypeÚcprogramÚheader_nameÚlink_header_testTrÛ   ztest.cÚpprY   c                 ó€   — d| v r9t          j        | d         ¦  «        } d                     d„ | D ¦   «         ¦  «        S dS )Nrô   rY   c                 ó   — g | ]}d |z  ‘ŒS )z#include <%s>
© ©Ú.0r�   s     rc   ú
<listcomp>z1validate_c.<locals>.to_header.<locals>.<listcomp>Ï  s   € Ð6Ð6Ð6¨QÐ$ qÑ(Ð6Ð6Ð6re   )r   r¦   Újoin)Údcts    rc   Ú	to_headerzvalidate_c.<locals>.to_headerÌ  sG   € Ø�cÐÐÝ	Œ�s˜=Ô)Ñ	*Ô	*€3Ø
�'Š'Ð6Ð6°#Ð6Ñ6Ô6Ñ
7Ô
7Ð7Ø	ˆre   Úframework_namerŠ   Ú	no_headerú/z.hÚremove_dot_hNéþÿÿÿzChecking for framework %sr�   Ú	frameworkzChecking for header %sz'list of headers in header_name is emptyrÜ   r   r¢   ÚlibzChecking for library %sÚstlibzChecking for static library %sÚfragmentzChecking for code snippetr    Úno))Úcxxflagsrî   )Úcflagsrî   )Ú	linkflagsÚlinkerzChecking for z flags ÚexecuteFÚ	test_execÚchmodr¡   rž   rŸ   ú
c                 ó   — g | ]}d |z  ‘ŒS )ú#include <%s>rù   rú   s     rc   rü   zvalidate_c.<locals>.<listcomp>  s   € ÐIÐIÐI°!˜/¨AÑ-ÐIÐIÐIre   Úmerge_config_headerz

rÍ   z missing "msg" in conf.check(...))r   Úwarnré   ra   Úderiver‚   r   Úclassesr³   ÚCXXrÖ   ÚCCr   r¦   r§   ÚlenÚSNIP_EMPTY_PROGRAMr¨   rÁ   ÚO755ÚINCKEYSrý   r  Úget_config_headerrn   Úundefine)rˆ   r©   r�   ra   rÿ   ÚfwknameÚfwkr`   ÚlÚ	flagsnameÚ	flagstypes              rc   Ú
validate_cr%  ˆ  s  € ð8 7ð 0ð 0€QØˆ"€W€WÝ„9Ð*¨QÑ.Ñ/Ô/Ð/øà�rÐÐÝ€"€[�/à�ˆˆØŒh�oŠoÑÔ€"€U�)Ø	ˆ%„y€à�bÐÐ ¨rÐ!1Ð!1Ø€"€Z�.Ø„\ð +•d”l×&Ò& uÑ-Ô-ð +Ø€2€j�>Ø
Œ(Œ,ð -Ø‡J‚JÐ+Ñ,Ô,Ð,øà
Œ(Œ+ð +Ø‡J‚JÐ)Ñ*Ô*Ð*à˜"ÐÐØ€"€^ÑØ
�eŒm˜BŸFšF :¨rÑ2Ô2Ñ3Ô3Ð3Ð3°r·v²v¸jÑ7IÔ7IÈUÒ7RÐ7RØ€2€nÑà�"ˆˆØ€"€V�*à�bÐÐØ	˜"Ð	Ð	 §¢Ð'9¸4Ñ @Ô @Ð	Ø˜Ô'¨¨F¬Ð4€2€j�>€>à˜Ô'Ð(€2€j�>€>å”=  J¤Ñ0Ô0€"€Z�.à˜bÐ Ð Ø#¨¨>Ô(:¸eÒ(CÐ'MÈÐ'SÐQSÑT€"ÐÑðð ð ð ˜ÐÐàÐÔ €'Ø	˜2Ð	Ð	ØŸš™œ€2€nÑØ	�Š�Ñ	Ô	ð 2Ø�g�g˜w˜w˜wÐ	'€3Ø‡f‚fˆ^ÑÔð Ø
ˆcˆrˆcŒ(€CØ	�Š�˜rÑ	"Ô	"€3Ý”} SÑ)Ô)¨S¨EÑ1€2€mÑØ)¨GÑ3€"€U�)Ø€"€[�/€/à�rÐÐØ	�"ˆˆØ'¨"¨]Ô*;Ñ;€2€e�9å„m�B�}Ô%Ñ&Ô&€!Ý	ˆQ‰ŒÐ:Ð:Ð:Ñ:Ô:Ð:àˆy˜‰}Œ}Õ1Ñ1€"€V�*Ø	˜2Ð	Ð	Ø˜!œŸ
š
™œ€2€nÑØ	˜"Ð	Ð	Ø×'Ò'¨¨!¬Ñ-Ô-€2€mÑà	ˆR€K€KØ	�"ˆˆØ(¨2¨e¬9Ñ4€2€e�9Ø	˜2Ð	Ð	Ø˜5œ	ŸšÑ)Ô)€2€nÑàˆr€M€MØ	�"ˆˆØ/°"°W´+Ñ=€2€e�9Ø	˜2Ð	Ð	Ø˜7œ×)Ò)Ñ+Ô+€2€nÑà�"ÐÐð �*Œ~€"€V�*Ø	�"ˆˆØ*€2€e�9Ø	�RˆˆØ€2€h�<àfð ð Ñ€i�	Ø�"€_€_Ø
�2ˆ+ˆ+ˆ+Ø.7¨i¨i¸¸I¼¸ÐG€B€u�IØ
�bˆ.ˆ.Ø€B€x�Løà�RˆˆØ€"€Y�-Ø€y„Mð Ø€Z„.×Ò˜Ñ$Ô$Ð$Ý”
€"€W�+à�BˆˆØ€"€X�,à�2ˆˆØ€"€W�+à�"ˆˆÝ!€"€V�*ð 	„H�WÔð _Ø�yŠyÐIÐI°t´xÅÔ7HÐIÑIÔIÑJÔJÈTÑQÐTVÐW]ÔT^Ñ^€"€V�*ð ‡F‚FÐ Ñ!Ô!ð  SÔ%<ð Ø!×3Ò3Ñ5Ô5Ð5Ð5°r¸&´z°zÐB€"€V�*Ø€#„+à
�ŠˆyÑÔð Ø€"€Y�-à�RÐÐØ‡-‚-��=Ô!Ñ"Ô"Ð"Ø�ˆˆØ‡*‚*Ð/Ñ0Ô0Ð0Ð0Ð0ð 	ˆre   c                 ó:  — d}|d         r3|d         �*|                      d¦  «        r	|d         }n|d         dk    }n|d         dk    }|                      d¦  «        �râ|                      dd¦  «        }|d         }|d         rÇ|                      d¦  «        r²t          |t          ¦  «        r�|                      d	d
¦  «        r.|                      |||                      dd
¦  «        |¬¦  «         nÀ|                      dd
¦  «        rd|z  }nt	          |¦  «        }|›d|›�}d|d         z  }| j                             ||¦  «         ng|                      d	d
¦  «        r|                      |||¬¦  «         n8d|d         z  }| j                             ||›dt	          |¦  «        ›�¦  «         |                      dd
¦  «        rx|                      d¦  «        r$d
| j        |                      |d         ¦  «        <   n?|d         r |                      d¦  «        r|| j        |<   nt	          |¦  «        | j        |<   d|v rM|                      d¦  «        r8| j                             t          t          j        |d         ¦  «        ¦  «         |r†d|v r‚ddlm}	 t          ¦   «         }
|d         D ]}||	j        v r|
|	j        |         z  }
Œ|
D ]G}|                     ¦   «         }||v r-| j                             |dz   |d         z   ||         ¦  «         ŒH|S )zl
	Sets the variables after a test executed in
	:py:func:`waflib.Tools.c_config.check` was run successfully
	r   r  rÍ   NÚ
define_retr¢   ÚcommentrY   r°   rœ   Úquote)r)  r(  z"%s"r¸   r±   rŠ   ©r(  r²   rô   Úauto_add_header_name)ÚccrootrÝ   r\   )r³   r{   r|   r´   Úintra   r]   Údefine_condr¨   r  r   r¦   Úwaflib.Toolsr,  ÚsetÚUSELIB_VARSÚlower)rˆ   r×   r©   Ú
is_successr(  r¢   Úsuccr`   r_   r,  Ú_varsr�   s               rc   Ú
post_checkr6  )  sb  € ð €Ø€y„Mð $Øˆ	„]ÐØ‡f‚fˆ\ÑÔð &Ø�I”€J€Jà�Y”- 1Ò$€Jøà�9” Ò"€*à‡F‚Fˆ=ÑÔñ ,Ø�FŠF�9˜bÑ!Ô!€'Ø�=Ô!€+Øˆ	„]ð I�r—v’v˜lÑ+Ô+ð Iµ
¸:ÅsÑ0KÔ0Kð IØ‡f‚fˆ_˜aÑ Ô ð 	$Ø‡K‚K�˜Z¨r¯vªv°g¸qÑ/AÔ/AÈ7€KÑSÔSÐSÐSà	‡v‚vˆg�qÑÔð Ø�ZÑ€T€Tå�
‰OŒO€TØ �[�[ $ $Ð
'€CØ
˜˜NÔ+Ñ
+€CØ„H×Ò˜#˜sÑ#Ô#Ð#Ð#à‡f‚fˆ_˜aÑ Ô ð IØ×Ò�[ *°gÐÑ>Ô>Ð>Ð>à
˜˜NÔ+Ñ
+€CØ„H×Ò˜#¨+¨+¨+µs¸:±´°ÐGÑHÔHÐHð ‡V‚VÐ˜qÑ!Ô!ð ,Ø‡f‚fˆ^ÑÔð ,Ø56€D„HˆT×Ò˜b Ô0Ñ1Ô1Ñ2Ð2Ø
ˆ9Œð ,˜"Ÿ&š& Ñ.Ô.ð ,Ø&€D„Hˆ[ÑÐå 
™OœO€D„Hˆ[Ñà�RÐÐØ‡V‚VÐ"Ñ#Ô#ð DØ„8×Ò�¥%¤-°°=Ô0AÑ"BÔ"BÑCÔCÐCàð ?�> RÐ'Ð'Ø!Ð!Ð!Ð!Ð!Ð!å
‰%Œ%€%ØˆjŒ>ð #ð #€aØˆ6ÔÐÐØ	ˆVÔ Ô"Ñ"€Eøàð ?ð ?€aØ‡w‚w�y„y€1Øˆ2€g€gØ„H×Ò˜!˜c™' B ~Ô$6Ñ6¸¸1¼Ñ>Ô>Ð>øØÐre   c                 óî  — |                       |¦  «          | j        |d         fi |¤Ž d}	  | j        |i |¤Ž}||d<   nP# | j        j        $ r>  | j        |d         dfi |¤Ž t          j        dk    r‚ |                      d¦  «         Y nw xY w | j	        |i |¤Ž}|s. | j        |d         dfi |¤Ž |                      d|z  ¦  «         n( | j        |  
                    |d	         |¦  «        fi |¤Ž |S )
aä  
	Performs a configuration test by calling :py:func:`waflib.Configure.run_build`.
	For the complete list of parameters, see :py:func:`waflib.Tools.c_config.validate_c`.
	To force a specific compiler, pass ``compiler='c'`` or ``compiler='cxx'`` to the list of arguments

	Besides build targets, complete builds can be given through a build function. All files will
	be written to a temporary directory::

		def build(bld):
			lib_node = bld.srcnode.make_node('libdir/liblc1.c')
			lib_node.parent.mkdir()
			lib_node.write('#include <stdio.h>\nint lib_func(void) { FILE *f = fopen("foo", "r");}\n', 'w')
			bld(features='c cshlib', source=[lib_node], linkflags=conf.env.EXTRA_LDFLAGS, target='liblc')
		conf.check(build_fun=build, msg=msg)
	r�   NrÍ   r    rÎ   rœ   rÏ   zThe configuration failed %rrž   )r%  rÐ   Ú	run_buildrÓ   ÚConfigurationErrorrÑ   r   rÕ   rÖ   r6  rÒ   )rˆ   r×   r©   rÊ   s       rc   Úcheckr:  i  sX  € ð" ‡‚�ÑÔÐØ€„��5”	Ð Ð ˜RÐ Ð Ð Ø€ð	ØˆŒ˜Ð ˜RÐ Ð €#ð €"€Y�-€-øð 	ŒÔ&ð *ð *ð *Ø€$„,ˆr�(Œ|˜XÐ,Ð,¨Ð,Ð,Ð,Ý	„\�AÒÐØà‡:‚:Ð(Ñ)Ô)Ð)Ð)Ð)ð*øøøð €t„˜Ð ˜RÐ Ð €Øð 4Ø€$„,ˆr�(Œ|˜XÐ,Ð,¨Ð,Ð,Ð,Ø‡*‚*Ð*¨SÑ0Ñ1Ô1Ð1Ð1à€$„,ˆt�|Š|˜B˜wœK¨Ñ,Ô,Ð3Ð3°Ð3Ð3Ð3Ø€s   ­A  Á A
BÂBc                   ó   — e Zd ZdZdZd„ ZdS )r  zg
	A task that runs programs after they are built. See :py:func:`waflib.Tools.c_config.test_exec_fun`.
	ÚPINKc                 ó  — t          | j        dd ¦  «        r²t          | j        dd¦  «        rN| j        j                             | j        d                              ¦   «         g¦  «        | j        j        _        d S | j        j                             | j        d                              ¦   «         g¦  «        | j        j        _        d S | j        j        pi }| 	                    t          t          j        ¦  «        ¦  «         dD ]R}| j        d         j                             ¦   «         t          j        j        z   |                     |d¦  «        z   ||<   ŒSt          | j        dd¦  «        rP| j        j                             | j        d                              ¦   «         g|¬¦  «        | j        j        _        d S | j        j                             | j        d                              ¦   «         g|¬¦  «        | j        j        _        d S )NÚrpathr'  Fr   )ÚLD_LIBRARY_PATHÚDYLD_LIBRARY_PATHÚPATHrY   r¶   )ÚgetattrÚ	generatorræ   r½   ÚinputsÚabspathÚretvalÚexec_commandra   Úupdater»   Úosr¼   Úparentr—   Úpathsepr³   )rˆ   ra   r_   s      rc   Úrunztest_exec.run•  s·  € ÝˆTŒ^˜W dÑ+Ô+ð eÝˆdŒn˜l¨EÑ2Ô2ð \Ø $¤Ô 2× >Ò >ÀÄÈAÄ×@VÒ@VÑ@XÔ@XÐ?YÑ ZÔ Z€D„NÔÔÐÐà $¤Ô 2× ?Ò ?ÀÄÈQÄ×AWÒAWÑAYÔAYÐ@ZÑ [Ô [€D„NÔÔÐÐà	ŒŒÐ	˜€3Ø‡:‚:�d•2”:ÑÔÑÔÐØ>ð Tð T€sØŒ{˜1Œ~Ô$×,Ò,Ñ.Ô.µ´´Ñ@À3Ç7Â7È3ÐPRÑCSÔCSÑS€Cˆ�H€HÝˆdŒn˜l¨EÑ2Ô2ð eØ $¤Ô 2× >Ò >ÀÄÈAÄ×@VÒ@VÑ@XÔ@XÐ?YÐ_bÐ >Ñ cÔ c€D„NÔÔÐÐà $¤Ô 2× ?Ò ?ÀÄÈQÄ×AWÒAWÑAYÔAYÐ@ZÐ`cÐ ?Ñ dÔ d€D„NÔÔÐÐre   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚcolorrL  rù   re   rc   r  r  �  s9   € € € € € ðð ð 
€ðeð eð eð eð ere   r  Ú
apply_linkc                 óR   — |                       d| j        j        d         ¦  «         dS )aH  
	The feature **test_exec** is used to create a task that will to execute the binary
	created (link task output) during the build. The exit status will be set
	on the build context, so only one program may have the feature *test_exec*.
	This is used by configuration tests::

		def configure(conf):
			conf.check(execute=True)
	r  r   N)Úcreate_taskÚ	link_taskÚoutputs©rˆ   s    rc   Útest_exec_funrX  ¥  s*   € ð ×Ò�+˜tœ~Ô5°aÔ8Ñ9Ô9Ð9Ð9Ð9re   c                 ó&   — d|d<    | j         |i |¤ŽS )za
	Runs a test with a task generator of the form::

		conf.check(features='cxx cxxprogram', ...)
	rð   rî   ©r:  ©rˆ   r×   r©   s      rc   Ú	check_cxxr\  ³  s$   € ð €€J�ØˆŒ
�AÐ˜ÐÐÐre   c                 ó&   — d|d<    | j         |i |¤ŽS )z]
	Runs a test with a task generator of the form::

		conf.check(features='c cprogram', ...)
	rï   rî   rZ  r[  s      rc   Úcheck_ccr^  ½  s$   € ð €€J�ØˆŒ
�AÐ˜ÐÐÐre   c                 óL   — | j         j        }|si x}| j         _        |pd||<   dS )zj
	Sets a comment that will appear in the configuration header

	:type key: string
	:type comment: string
	rY   N)ra   ÚDEFINE_COMMENTS)rˆ   rÆ   r(  Úcomss       rc   Úset_define_commentrb  Ç  s6   € ð 	ŒÔ €Øð 'Ø$&Ð&€$ˆŒÔ	!Øˆ]˜€€c�€€re   c                 óJ   — | j         j        pi }|                     |d¦  «        S )zB
	Returns the comment associated to a define

	:type key: string
	rY   )ra   r`  r³   )rˆ   rÆ   ra  s      rc   Úget_define_commentrd  Ô  s'   € ð 	ŒÔ Ð& B€Ø�Š��bÑÔÐre   TrY   c                 ó  — t          |t          ¦  «        sJ ‚|sdS |du rd}n|dv rd}t          |t          ¦  «        st          |t          ¦  «        rd}n|rdpd}||t          |¦  «        fz  }|dz   }| j        j        }|D ]1}	|	                     |¦  «        r|||                     |	¦  «        <    nŒ2| j                             d	|¦  «         | j         	                    t          |¦  «         |                      ||¦  «         dS )
a  
	Stores a single define and its state into ``conf.env.DEFINES``. The value is cast to an integer (0/1).

	:param key: define name
	:type key: string
	:param val: value
	:type val: int or string
	:param quote: enclose strings in quotes (yes by default)
	:type quote: bool
	NTrœ   )FNr   z%s=%sz%s="%s"r¸   rn   )r{   r|   r-  Úfloatra   rn   rƒ   Úindexr]   rg   ÚDEFKEYSrb  )
rˆ   rÆ   r`   r)  r(  rª   rd   Úbanr�   r�   s
             rc   r´   r´   Þ  s6  € õ 	�3�ÑÔÐÐÐØð 	Ø€&Øˆ4€K€KØ	€#€#Ø	ˆ]ÐÐØ	€#åˆs•CÑÔð %�J s­EÑ2Ô2ð %Ø€!€!àÐ�	Ð$˜W€!ØˆC•�S‘”ˆ?Ñ€à
ˆS�y€Ø„xÔ€Ø
ð (ð (€QØ‡\‚\�#ÑÔð 	Ø€3€s‡y‚y��|„|ÑØ€5ð	ð „(×Ò˜	 3Ñ'Ô'Ð'à„×Ò� Ñ%Ô%Ð%Ø×Ò˜˜gÑ&Ô&Ð&Ð&Ð&re   c                 óü   ‡— t          |t          ¦  «        sJ ‚|sdS |dz   Šˆfd„| j        j        D ¦   «         }|| j        _        | j                             t
          |¦  «         |                      ||¦  «         dS )zb
	Removes a global define from ``conf.env.DEFINES``

	:param key: define name
	:type key: string
	Nr¸   c                 ó>   •— g | ]}|                      ‰¦  «        °|‘ŒS rù   )rƒ   )rû   r�   ri  s     €rc   rü   zundefine.<locals>.<listcomp>  s*   ø€ Ð=Ð=Ð=ˆa¨1¯<ª<¸Ñ+<Ô+<Ð=ˆÐ=Ð=Ð=re   )r{   r|   ra   rn   rg   rh  rb  )rˆ   rÆ   r(  r�   ri  s       @rc   r  r    s�   ø€ õ 	�3�ÑÔÐÐÐØð 	Ø€&Ø
ˆS�y€Ø=Ð=Ð=Ð=�4”8Ô#Ð=Ñ=Ô=€Ø€„ÔØ„×Ò� Ñ%Ô%Ð%Ø×Ò˜˜gÑ&Ô&Ð&Ð&Ð&re   c                 ó¢   — t          |t          ¦  «        sJ ‚|sdS |r|                      |d|¬¦  «         dS |                      ||¬¦  «         dS )a  
	Conditionally defines a name::

		def configure(conf):
			conf.define_cond('A', True)
			# equivalent to:
			# if val: conf.define('A', 1)
			# else: conf.undefine('A')

	:param key: define name
	:type key: string
	:param val: value
	:type val: int or string
	Nrœ   r*  )r{   r|   r´   r  )rˆ   rÆ   r`   r(  s       rc   r.  r.    si   € õ  	�3�ÑÔÐÐÐØð 	Ø€&Øð &Ø‡+‚+ˆc�1˜g€+Ñ&Ô&Ð&Ð&Ð&à‡-‚-�˜W€-Ñ%Ô%Ð%Ð%Ð%re   c                 ó�   — |rt          |t          ¦  «        sJ ‚|dz   }| j        j        D ]}|                     |¦  «        r dS ŒdS )z±
	Indicates whether a particular define is globally set in ``conf.env.DEFINES``.

	:param key: define name
	:type key: string
	:return: True if the define is set
	:rtype: bool
	r¸   TF)r{   r|   ra   rn   rƒ   ©rˆ   rÆ   ri  r�   s       rc   Ú
is_definedro  -  sa   € ð 	Ð$•
˜3¥Ñ$Ô$Ð$Ð$Ð$à
ˆS�y€Ø
Œ(Ô
ð ð €QØ‡\‚\�#ÑÔð Ø
ˆ$ˆ$ðàˆre   c                 ó¼   — |rt          |t          ¦  «        sJ ‚|dz   }| j        j        D ]0}|                     |¦  «        r|t          |¦  «        d…         c S Œ1dS )z~
	Returns the value of an existing define, or None if not found

	:param key: define name
	:type key: string
	:rtype: string
	r¸   N)r{   r|   ra   rn   rƒ   r  rn  s       rc   Ú
get_definerq  ?  st   € ð 	Ð$•
˜3¥Ñ$Ô$Ð$Ð$Ð$à
ˆS�y€Ø
Œ(Ô
ð ð €QØ‡\‚\�#ÑÔð Ø
�C�‰HŒHˆIˆIŒ,ÐÐÐðàˆre   c                 óH   — | j         j        pdt          j        |¦  «        z  S )a  
	Returns a variable suitable for command-line or header use by removing invalid characters
	and prefixing it with ``HAVE_``

	:param key: define name
	:type key: string
	:return: the input key prefixed by *HAVE_* and substitute any invalid characters.
	:rtype: string
	zHAVE_%s)ra   ÚHAVE_PATr   r¥   )rˆ   rÆ   s     rc   r¨   r¨   P  s$   € ð 
ŒÔ	Ð	'˜i­5Ô+BÀ3Ñ+GÔ+GÑGÐGre   c                 óè  — |st           }|pdt          j        |¦  «        z  }|r| j        p| j                             ¦   «         }	|	                     |¦  «        }	|	j                             ¦   «          dg}
|
 	                    d|›d|›d�¦  «         |
 	                    |  
                    |||¬¦  «        ¦  «         |
 	                    d|z  ¦  «         |	                     d                     |
¦  «        ¦  «         | j                             t          j        |	                     ¦   «         g¦  «         |r;| j        t$                   D ]}|                      |¦  «         Œg | j        t$          <   dS dS )	aÖ  
	Writes a configuration header containing defines and includes::

		def configure(cnf):
			cnf.define('A', 1)
			cnf.write_config_header('config.h')

	This function only adds include guards (if necessary), consult
	:py:func:`waflib.Tools.c_config.get_config_header` for details on the body.

	:param configfile: path to the file to create (relative or absolute)
	:type configfile: string
	:param guard: include guard name to add, by default it is computed from the file name
	:type guard: string
	:param top: write the configuration header from the build directory (default is from the current path)
	:type top: bool
	:param defines: add the defines (yes by default)
	:type defines: bool
	:param headers: add #include in the file
	:type headers: bool
	:param remove: remove the defines after they are added (yes by default, works like in autoconf)
	:type remove: bool
	:type define_prefix: string
	:param define_prefix: prefix all the defines in the file with a particular prefix
	zW_%s_WAFz;/* WARNING! All changes made to this file will be lost! */
z#ifndef z	
#define r  )Údefine_prefixz
#endif /* %s */
N)ÚWAF_CONFIG_Hr   r¥   Úbldnoder—   Úget_bldrã   rJ  ÚmkdirrÁ   r  rä   rý   ra   rg   r   Ú	CFG_FILESrE  rh  r  )rˆ   Ú
configfileÚguardÚtopÚdefinesÚheadersÚremoveru  Ú	waf_guardrç   r�   rÆ   s               rc   Úwrite_config_headerr‚  ]  si  € ð6 	ð Ý€*ØÐF�j¥5Ô#:¸:Ñ#FÔ#FÑF€àÐ�”Ð3 ¤	× 1Ò 1Ñ 3Ô 3€Ø�Š�zÑ"Ô"€Ø„×ÒÑÔÐàFÐG€Ø‡‚€¨)¨)¨)°Y°Y°YÐ?Ñ@Ô@Ð@Ø‡‚ˆD×"Ò" 7¨GÀ=Ð"ÑQÔQÑRÔRÐRØ‡‚Ð! IÑ-Ñ.Ô.Ð.à‡‚ˆD�IŠI�c‰NŒNÑÔÐð „×Ò�œ¨$¯,ª,©.¬.Ð)9Ñ:Ô:Ð:à
ð ØŒX•gÔð ð €cØ‡=‚=�ÑÔÐÐØ€$„(�7ÑÐÐðð re   c                 ó,  — g }| j         j        r|                     | j         j        ¦  «         |r-| j         t                   D ]}|                     d|z  ¦  «         Œ|r¢i }| j         j        D ] }|                     d¦  «        \  }}	}
|
||<   Œ!| j         t                   D ]`}|                      |¦  «        }|rd|z  }d|›|›d||         ›|›�}n# t          $ r d|›|›d|›�}Y nw xY w|                     |¦  «         Œad 	                    |¦  «        S )	aí  
	Creates the contents of a ``config.h`` file from the defines and includes
	set in conf.env.define_key / conf.env.include_key. No include guards are added.

	A prelude will be added from the variable env.WAF_CONFIG_H_PRELUDE if provided. This
	can be used to insert complex macros or include guards::

		def configure(conf):
			conf.env.WAF_CONFIG_H_PRELUDE = '#include <unistd.h>\n'
			conf.write_config_header('config.h')

	:param defines: write the defines values
	:type defines: bool
	:param headers: write include entries for each element in self.env.INCKEYS
	:type headers: bool
	:type define_prefix: string
	:param define_prefix: prefix all the defines with a particular prefix
	:return: the contents of a ``config.h`` file
	:rtype: string
	r  r¸   z	 /* %s */z#define ú z
/* #undef z */r  )
ra   ÚWAF_CONFIG_H_PRELUDErÁ   r  rn   Ú	partitionrh  rd  ÚKeyErrorrý   )rˆ   r~  r  ru  r�   r�   Útblr×   Úar\   ÚbÚcaptionÚtxts                rc   r  r  �  s_  € ð, 
€à„HÔ!ð ,Ø‡*‚*ˆTŒXÔ*Ñ+Ô+Ð+àð #ØŒ8•GÔð #ð #€aØ‡:‚:ˆo Ñ!Ñ"Ô"Ð"Ð"àð Ø
€#ØŒ8Ôð ð €aØ�[Š[˜ÑÔ�7€1€aˆØ€3€q�6€6àŒ8•GÔð ð €aØ×$Ò$ QÑ'Ô'€7Øð $Ø˜GÑ#€Gð>Ø!. °°°°3°q´6°6¸7¸7Ð
C€C€CøÝ
ð >ð >ð >ð >Ø#0 =°!°!°!°W°WÐ
=€C€C€Cð>øøøà‡:‚:ˆc�?„?€?€?Ø�	Š	�#‰ŒÐs   Â>CÃC(Ã'C(c                 óN   —  | j         dd¬¦  «          | j         dd¬¦  «         dS )z6
	Adds CFLAGS / CPPFLAGS from os.environ to conf.env
	ÚCPPFLAGSF©Úduprk   N©Úadd_os_flagsr   s    rc   Úcc_add_flagsr“  ¿  s:   € ð
 €Ô�: 5Ð)Ñ)Ô)Ð)Ø€Ô�8 Ð'Ñ'Ô'Ð'Ð'Ð're   c                 óN   —  | j         dd¬¦  «          | j         dd¬¦  «         dS )z8
	Adds CXXFLAGS / CPPFLAGS from os.environ to conf.env
	rŽ  Fr�  rl   Nr‘  r   s    rc   Úcxx_add_flagsr•  Ç  s:   € ð
 €Ô�: 5Ð)Ñ)Ô)Ð)Ø€Ô�: 5Ð)Ñ)Ô)Ð)Ð)Ð)re   c                 óN   —  | j         dd¬¦  «          | j         dd¬¦  «         dS )z8
	Adds LINKFLAGS / LDFLAGS from os.environ to conf.env
	rt   Fr�  ÚLDFLAGSNr‘  r   s    rc   Úlink_add_flagsr˜  Ï  s:   € ð
 €Ô�; EÐ*Ñ*Ô*Ð*Ø€Ô�9 %Ð(Ñ(Ô(Ð(Ð(Ð(re   c                 óx   — | j         j        st          j        ¦   «         | j         _         | j        d¦  «         dS )z
	Loads the Waf c extensions
	rï   N©ra   ÚDEST_OSr   Úunversioned_sys_platformÚloadr   s    rc   Úcc_load_toolsrž  ×  s7   € ð
 	ŒÔð 6ÝÔ3Ñ5Ô5€$„(ÔØ
€„ˆ3�„€€€re   c                 óx   — | j         j        st          j        ¦   «         | j         _         | j        d¦  «         dS )z 
	Loads the Waf c++ extensions
	rð   Nrš  r   s    rc   Úcxx_load_toolsr   à  s<   € ð
 	ŒÔð 6ÝÔ3Ñ5Ô5€$„(ÔØ
€„ˆ5ÑÔÐÐÐre   c                 ó   ‡ ‡— |g d¢z   }‰ j         j         pd}	  ‰ j        |dd                     ¦   «         |¬¦  «        \  }}n(# t          j        $ r  ‰ j        d|z  ¦  «         Y nw xY w|rk|                     d¦  «        dk    r ‰ j        d¦  «         |                     d	¦  «        dk     r)|                     d
¦  «        dk     r ‰ j        d¦  «         |r)|                     d¦  «        dk     r ‰ j        d¦  «         |r)|                     d
¦  «        dk     r ‰ j        d¦  «         |s)|                     d
¦  «        dk    r ‰ j        d¦  «         i Š|s|s|�rœ|                     ¦   «         }|D ]>}	t          j	        |	¦  «        }
t          |
¦  «        dk    r|
d         }|
d         }|‰|<   Œ?ˆfd„}‰ j         j        sd‰ j         _        t          D ]&} ||¦  «        rt          |         ‰ j         _         n;Œ' |d¦  «        r |d¦  «        rd‰ j         _        n |d¦  «        rd‰ j         _         |d¦  «        rd‰ j         _        n} |d¦  «        s |d¦  «        s |d¦  «        rEd‰ j         _        ‰ j         j        s‰ j         j        ‰ j         _        ‰ j         j        ‰ j         _        n |d¦  «        rd‰ j         _        ‰ j         j        s(t#          j        ‰ j         j        ¦  «        ‰ j         _        t&          D ]&} ||¦  «        rt&          |         ‰ j         _         nŒ't+          j        dd                      ˆ fd!„d"D ¦   «         ¦  «        z   ¦  «         |r,‰d         }|dd#…         |d#         |d$         f‰ j         _        ng |d
¦  «        r- |d%¦  «        r"‰d%         ‰d&         ‰d'         f‰ j         _        n/‰d	         ‰d(         ‰                     d)d*¦  «        f‰ j         _        ‰S )+zÏ
	Runs the preprocessor to determine the gcc/icc/clang version

	The variables CC_VERSION, DEST_OS, DEST_BINFMT and DEST_CPU will be set in *conf.env*

	:raise: :py:class:`waflib.Errors.ConfigurationError`
	)z-dMz-Eú-Nr   r  )ÚoutputÚinputra   z+Could not determine the compiler version %rÚ__INTEL_COMPILERz%The intel compiler pretends to be gccÚ__GNUC__Ú	__clang__z%Could not determine the compiler typezNot icc/icpczNot clang/clang++zXCould not find gcc/g++ (only Clang), if renamed try eg: CC=gcc48 CXX=g++48 waf configureri   rœ   c                 ó   •— | ‰v S ©Nrù   )r_   r×   s    €rc   ÚisDzget_cc_version.<locals>.isD  s   ø€ Ø
�ˆ(€?re   rY   Ú	__APPLE__Ú__MACH__r,   Ú__unix__ÚgenericÚ__ELF__ÚelfÚ	__WINNT__r#   r*   Úpezmac-ozccroot: dest platform: r„  c                 ó.   •— g | ]}‰j         |         pd ‘ŒS )ú?r¶   )rû   r�   r   s     €rc   rü   z"get_cc_version.<locals>.<listcomp>5  s$   ø€ Ð2vÐ2vÐ2vÈ!°4´8¸A´;Ð3EÀ#Ð2vÐ2vÐ2vre   )r›  ÚDEST_BINFMTÚDEST_CPUr  éÿÿÿÿÚ__clang_major__Ú__clang_minor__Ú__clang_patchlevel__Ú__GNUC_MINOR__Ú__GNUC_PATCHLEVEL__Ú0)ra   r½   Úencoder	   rÔ   rÖ   ÚfindÚ
splitlinesr}   Úsplitr  r›  ÚMACRO_TO_DESTOSrµ  Ú	IMPLIBDIRÚLIBDIRÚBINDIRr   Údestos_to_binfmtÚMACRO_TO_DEST_CPUr¶  r   Údebugrý   Ú
CC_VERSIONr³   )r   ÚccÚgccÚiccÚclangrÃ   ra   ÚoutÚerrr‰   r�   rÆ   r`   rª  ÚiÚverr×   s   `               @rc   Úget_cc_versionrÒ  é  sµ  øø€ ð 
ÐÐÐÑ€Ø„x„|Ð�t€ðBØˆTÔ˜c¨!°4·;²;±=´=ÀcÐJÑJÔJ�(€#€s€søÝŒð Bð Bð BØ€$„*Ð:¸SÑ@ÑAÔAÐAÐAÐAðBøøøð ð 7Ø‡X‚XÐ Ñ!Ô! QÒ&Ð&Ø€4„:Ð5Ñ6Ô6Ð6Ø‡X‚XˆjÑÔ˜AÒÐ #§(¢(¨;Ñ"7Ô"7¸!Ò";Ð";Ø€4„:Ð5Ñ6Ô6Ð6àð ˆC�HŠHÐ'Ñ(Ô(¨1Ò,Ð,Ø€$„*ˆ^ÑÔÐà	ð "ˆc�hŠh�{Ñ#Ô# aÒ'Ð'Ø€$„*Ð Ñ!Ô!Ð!Øð i�#—(’(˜;Ñ'Ô'¨1Ò,Ð,Ø€$„*ÐgÑhÔhÐhà€Øð 6bˆ3ð 6b�%ñ 6bØ�ŠÑÔ€#Øð ð €dÝ	Œ�TÑ	Ô	€3Ý	ˆ#�h„hˆq‚j€jØ
ˆaŒ&€CØ
ˆaŒ&€CØ€A€c�Føðð ð ð ð ð
 
ŒÔ	ð Ø€4„8ÔÝð !ð !€aØ	€cˆ!�f„fð 
Ý& qÔ)€D„HÔØ	€Eð
ð 
€cˆ+ÑÔð !˜3˜3˜z™?œ?ð !Ø€D„HÔÐØˆˆJ‰Œð !Ø €D„HÔà€Sˆ�^„^ð "Ø€4„8ÔÐØ
€sˆ;ÑÔð "˜3˜3˜|Ñ,Ô,ð "°°°H±´ð "Ø€4„8ÔØ
Œ(Ô
ð )Øœœ€D„HÔØ”X”_€4„8„?€?Ø
€sˆ;ÑÔð "Ø!€4„8Ôà	ŒÔ	ð CåÔ0°´Ô1AÑBÔB€4„8Ôåð 
ð 
€aØ	€cˆ!�f„fð 
Ý)¨!Ô,€D„HÔØ	€Eð
õ „*Ð&¨¯ªÐ2vÐ2vÐ2vÐ2vÐOuÐ2vÑ2vÔ2vÑ)wÔ)wÑwÑxÔxÐxØð bØ	
ÐÔ	€3Ø˜c˜r˜cœ( C¨¤G¨S°¬WÐ5€4„8ÔÐà	€cˆ+ÑÔð b˜3˜3Ð0Ñ1Ô1ð bØÐ.Ô/°Ð3DÔ1EÀqÐI_ÔG`Ða€D„HÔÐð ˜Zœ=¨!Ð,<Ô*=¸q¿uºuÐEZÐ\_Ñ?`Ô?`Ða€D„HÔØ	€s   ™)A Á"A(Á'A(c                 ó‚  — |dgz   }	  | j         |d¬¦  «        \  }}n(# t          j        $ r  | j        d|z  ¦  «         Y nw xY wdD ]f}t	          j        |t          j        ¦  «        j        } ||p|¦  «        }|r1|                     ¦   «         }|d         |d         f| j	        _
         d	S Œg | j        d¦  «         d	S )
z[
	Returns the Aix compiler version

	:raise: :py:class:`waflib.Errors.ConfigurationError`
	z	-qversionr   ©r£  zCould not find xlc %r)z0IBM XL C/C\+\+.* V(?P<major>\d*)\.(?P<minor>\d*)ÚmajorÚminorz$Could not determine the XLC version.N)r½   r	   rÔ   rÖ   ÚreÚcompileÚIÚsearchÚ	groupdictra   rÉ  )	r   rÊ  rÃ   rÎ  rÏ  rÉ   Ú
version_reÚmatchr×   s	            rc   Úget_xlc_versionrÞ  A  sý   € ð 
ˆ[ˆMÑ€ð,ØˆTÔ˜c¨!Ð,Ñ,Ô,�(€#€s€søÝŒð ,ð ,ð ,Ø€$„*Ð$ sÑ*Ñ+Ô+Ð+Ð+Ð+ð,øøøð Að 5ð 5€QÝŒz˜!�RœTÑ"Ô"Ô)€*Ø
ˆ*�S�Z˜CÑ
 Ô
 €%Ø
ð 	Ø‡‚ÑÔ€1Ø˜Gœ* a¨¤jÐ1€4„8ÔØ€5€5ð	ð
 €$„*Ð3Ñ4Ô4Ð4Ð4Ð4s   ˆ ž"AÁAc                 ó8  — |dgz   }	  | j         |d¬¦  «        \  }}nm# t          j        $ r[}t          |d¦  «        r t          |d¦  «        rt          |d¦  «        s | j        d|z  ¦  «         |j        }|j        }Y d}~nd}~ww xY w|p|}|                     ¦   «         d         }t          j	        d	t          j
        ¦  «        j        } ||¦  «        }|r0|                     ¦   «         }	|	d
         |	d         f| j        _        dS  | j        d¦  «         dS )z[
	Returns the Sun compiler version

	:raise: :py:class:`waflib.Errors.ConfigurationError`
	z-Vr   rÔ  Ú
returncodeÚstdoutÚstderrzCould not find suncc %rNz^cc: (studio.*?|\s+)?(sun\s+(c\+\+|c)|(WorkShop\s+Compilers))?\s+(?P<major>\d*)\.(?P<minor>\d*)rÕ  rÖ  z&Could not determine the suncc version.)r½   r	   rÔ   ÚhasattrrÖ   rá  râ  rÀ  r×  rØ  rÙ  rÚ  rÛ  ra   rÉ  )
r   rÊ  rÃ   rÎ  rÏ  rØ   rÄ   rÜ  rÝ  r×   s
             rc   Úget_suncc_versionrä  Y  s[  € ð 
ˆTˆF�{€ðØˆTÔ˜c¨!Ð,Ñ,Ô,�(€#€s€søÝŒð ð ð å
�!�\Ñ
"Ô
"ð /¥w¨q°(Ñ';Ô';ð /ÅÈÈ8Ñ@TÔ@Tð /Ø€4„:Ð'¨#Ñ-Ñ.Ô.Ð.Ø	Œ€#Ø	Œ€#€#€#€#€#€#øøøøðøøøð ˆJ�3€Ø×ÒÑÔ Ô"€õ
 ŒjÐzÕ|~ô  }Añ  Bô  Bô  I€Ø	ˆ�GÑ	Ô	€Ø	ð 7Ø‡o‚oÑÔ€!Ø˜7œ Q w¤ZÐ0€$„(ÔÐÐà€$„*Ð5Ñ6Ô6Ð6Ð6Ð6s   ˆ žB­ABÂBc                 ó˜   — | j         j        dk    r7d| j         j        | j         j        fv r| j                              dd¦  «         dS dS dS )zÇ
	Adds ``--as-needed`` to the *LINKFLAGS*
	On some platforms, it is a default flag.  In some cases (e.g., in NS-3) it is necessary to explicitly disable this feature with `-Wl,--no-as-needed` flag.
	r°  rË  rt   z-Wl,--as-neededN)ra   rµ  r‚   ÚCC_NAMErg   rW  s    rc   Úadd_as_neededrç  z  sZ   € ð 	„HÔ˜EÒ!Ð! e°´Ô0AÀ4Ä8ÔCSÐ/TÐ&TÐ&TØ„(×Ò˜Ð&7Ñ8Ô8Ð8Ð8Ð8ð "Ð!Ð&TÐ&Tre   c                   ó<   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	S )
Úcfgtaskz›
	A task that executes build configuration tests (calls conf.check)

	Make sure to use locks if concurrent access to the same conf.env data is necessary.
	c                 ó`   — t          j         j        | g|¢R i |¤Ž t          ¦   «         | _        d S r©  )r   Ú__init__r0  Ú	run_afterr[  s      rc   rë  zcfgtask.__init__‹  s4   € Ý„)Ô�TÐ$˜AÐ$Ð$Ð$ Ð$Ð$Ð$Ý‘5”5€$„.€.€.re   c                 ó   — dS )NrY   rù   rW  s    rc   Údisplayzcfgtask.display�  s   € Ø	ˆre   c                 óX   — | j         D ]}|j        st          j        c S Œt          j        S r©  )rì  Úhasrunr   Ú	ASK_LATERÚRUN_ME)rˆ   r�   s     rc   Úrunnable_statuszcfgtask.runnable_status’  s8   € ØŒ>ð ð €aØ
Œ(ð ÝŒ>ÐÐÐðå	ŒÐre   c                 ó   — t           j        S r©  ©r   ÚSIG_NILrW  s    rc   Úuidzcfgtask.uid˜  ó
   € Ý	ŒÐre   c                 ó   — t           j        S r©  rõ  rW  s    rc   Ú	signaturezcfgtask.signature›  rø  re   c           	      ó’  — | j         }t          j        |j                             ¦   «         |j                             ¦   «         ¬¦  «        }|j        |_        |                     ¦   «          d|_        | j	        |_	        | |_
        | j        }	 d|v r]|                     |d         |                     dd¦  «        |                     dd¦  «        |                     dd¦  «        ¬¦  «         d S |                     d	d
¦  «        |d<   d
|d	<   	  |j        di |¤Ž |d         |d	<   d S # |d         |d	<   w xY w# t          $ r Y dS w xY w)N)Útop_dirÚout_dirrœ   Úfuncr�   rY   rž   r    )ré   r�   rž   r    Ú	mandatoryTÚmulticheck_mandatoryrù   )r   r   ÚBuildContextrâ   rE  rw  ra   Ú	init_dirsÚin_msgÚloggerÚmulticheck_taskr¹   Útestr³   r:  Ú	Exception)rˆ   r   ræ   r¹   s       rc   rL  zcfgtask.runž  sq  € Ø	Œ€$ÝÔ 4¤<×#7Ò#7Ñ#9Ô#9À4Ä<×CWÒCWÑCYÔCYÐZÑZÔZ€#ØŒH€#„'Ø‡-‚-�/„/€/Ø€#„*ØŒ{€#„*Ø€#ÔØ	Œ€$ðØ�€n€nØ‡H‚H�t˜F”|Ø	�Š�%˜Ñ	Ô	Ø�8Š8�G˜RÑ Ô Ø�HŠH�X˜rÑ"Ô"ð ñ ô ð ð ð ð $(§8¢8¨K¸Ñ#>Ô#>€DÐ	Ñ Ø€DˆÑð6Ø€S„YÐÐ�ÐÐÐàÐ4Ô5€Tˆ+ÑÐÐø˜Ð4Ô5€Tˆ+ÑÐ5Ð5Ð5Ð5øÝ	ð ð ð Ø
ˆ!ˆ!ðøøøs1   ÂAD8 Ã/D8 ÄD( ÄD8 Ä(D5Ä5D8 Ä8
EÅEc                 óX  — t           j                              | ¦  «         d| j        v �r | j        j        j        5  | j                             | j        d         ¦  «         | j        t           j	        k    r| j         
                    dd¦  «         n~| j        t           j        k    r5| j         
                    | j                             dd¦  «        d¦  «         n4| j         
                    | j                             dd¦  «        d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S d S )	Nr�   ztest cancelledrÎ   r    r	  rž   rŸ   ÚGREEN)r   Úprocessr¹   rC  ræ   Úmulticheck_lockr   rÐ   rð  ÚNOT_RUNrÑ   ÚSUCCESSr³   rW  s    rc   r
  zcfgtask.process¸  sI  € Ý„)×Ò�DÑÔÐØ
ˆdŒiÐÑØŒÔÔ*ð ?ð ?Ø„I×Ò˜œ	 %Ô(Ñ)Ô)Ð)Ø„{•d”lÒ"Ð"Ø	„Y×ÒÐ'¨Ñ2Ô2Ð2Ð2Ø	Œ�œÒ	$Ð	$Ø	„Y×Ò�t”y—}’} X¨tÑ4Ô4°hÑ?Ô?Ð?Ð?à	„Y×Ò�t”y—}’} W¨eÑ4Ô4°gÑ>Ô>Ð>ð?ð ?ð ?ñ ?ô ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?øøøð ?ð ?ð ?ð ?ð ?ð ?ð Ðs   »CDÄD!Ä$D!N)rM  rN  rO  rP  rë  rî  ró  r÷  rú  rL  r
  rù   re   rc   ré  ré  …  s‡   € € € € € ðð ð
ð ð ðð ð ðð ð ðð ð ðð ð ðð ð ð4
?ð 
?ð 
?ð 
?ð 
?re   ré  c           	      ó   ‡—  | j         |                     ddt          |¦  «        z  ¦  «        fi |¤Ž dt          fD ]}| j                             |g ¦  «         Œ| j        j        pi | j        _         G ˆfd„dt          ¦  «        } |¦   «         }|                     dd¦  «        |_        i |_	        g Ši }|D ]—}t          j        d         |d	¬
¦  «        }‰                     |¦  «         ||_        ||_        | |_        ||_        t!          j        t%          t'          |¦  «        ¦  «        | j        ¦  «        |_        d|v r|||d         <   Œ˜‰D ]Î}t+          j        |j                             dg ¦  «        ¦  «        D ]8}	||	         }
|
st/          d|	z  ¦  «        ‚|
j                             |¦  «         Œ9t+          j        |j                             dg ¦  «        ¦  «        D ]8}	||	         }
|
st/          d|	z  ¦  «        ‚|j                             |
¦  «         Œ9ŒÏˆfd„}t5          j        |t8          j        j        ¦  «        x|_        }t*          j          !                    ¦   «         |_"         |¦   «         |_#        |  $                    d¦  «         | %                    ¦   «          ‰D ] }|j        j&         '                    ¦   «          Œ!|                       d¦  «         |j(        r`|j(        D ]X}tS          |dd	¦  «        rE|  *                    |j+        ¦  «         |  $                    dd¬¦  «         tY          j-        d¦  «        ‚ŒYd}‰D ]&}|j.        t          j/        t          j0        fvr|dz  }Œ'|r( | j$        |                     dd|z  ¦  «        fddi|¤Ž n | j$        d!i |¤Ž ‰D ]\}|j.        t          j/        k    rE|j                             dd¦  «        r*|  1                    |                     d¦  «        pd ¦  «         Œ]d	S )"a2  
	Runs configuration tests in parallel; results are printed sequentially at the end of the build
	but each test must provide its own msg value to display a line::

		def test_build(ctx):
			ctx.in_msg = True # suppress console outputs
			ctx.check_large_file(mandatory=False)

		conf.multicheck(
			{'header_name':'stdio.h', 'msg':'... stdio', 'uselib_store':'STDIO', 'global_define':False},
			{'header_name':'xyztabcd.h', 'msg':'... optional xyztabcd.h', 'mandatory': False},
			{'header_name':'stdlib.h', 'msg':'... stdlib', 'okmsg': 'aye', 'errmsg': 'nope'},
			{'func': test_build, 'msg':'... testing an arbitrary build function', 'okmsg':'ok'},
			msg       = 'Checking for headers in parallel',
			mandatory = True, # mandatory tests raise an error at the end
			run_all_tests = True, # try running all tests
		)

	The configuration tests may modify the values in conf.env in any order, and the define
	values can affect configuration tests being executed. It is hence recommended
	to provide `uselib_store` values with `global_define=False` to prevent such issues.
	r�   z Executing %d configuration testsrn   c                   ó&   •— e Zd Zd„ Zˆ fd„Zd„ ZdS )úmulticheck.<locals>.parc                 ó0   — d| _         i | _        d| _        d S )NFr   )ÚkeepÚ	task_sigsÚprogress_barrW  s    rc   rë  z multicheck.<locals>.par.__init__æ  s   € Ø€4„9Ø€4„>Ø€4ÔÐÐre   c                 ó"   •— t          ‰¦  «        S r©  )r  )rˆ   Útaskss    €rc   Útotalzmulticheck.<locals>.par.totalê  s   ø€ Ý
ˆe‰*Œ*Ðre   c                 ó   — d S r©  rù   r[  s      rc   r‡   zmulticheck.<locals>.par.to_logì  s   € Ø	€6re   N)rM  rN  rO  rë  r  r‡   ©r  s   €rc   Úparr  å  sL   ø€ € € € € ðð ð ðð ð ð ð ð
ð 
ð 
ð 
ð 
re   r  Úrun_all_testsTré  N)ræ   ra   ÚidÚbefore_testszNo test named %rÚafter_testsc               3   ó   •K  — ‰ V — 	 g V — Œr©  rù   r  s   €rc   Úitzmulticheck.<locals>.it  s#   øè è € Ø€+€+€+ðØ	€8€8€8ðre   Ústartedz-> processing test resultsÚerr_msgÚfailÚRED)rQ  zFThere is an error in the library, read config.log for more informationr   rœ   r    z%s test failedrQ  rÎ   úall okrÿ  ÚfatalmsgzAOne of the tests has failed, read config.log for more information)r%  )2rÐ   r³   r  rh  ra   r]   r`  Úobjectr  Úimp_sigsr   r  rÁ   r¹   ræ   r   r   Úmake_mem_loggerr|   r  r  r   r¦   r¤   rì  Úaddr
   ÚParallelr   ÚoptionsÚjobsÚproducerÚ	threadingÚLockr  ÚbiterrÑ   ÚstartÚ
memhandlerÚflushÚerrorrB  r‡   r"  r	   rÔ   rð  r  r  rÖ   )rˆ   r×   r©   r_   r  ræ   Ú
id_to_taskrþ   r�   rÆ   Útskr   ÚpÚfailure_countr  s                 @rc   Ú
multicheckr:  Ä  sz  ø€ ð0 €„�—’�uÐ@Å3ÀqÁ6Ä6ÑIÑJÔJÐQÐQÈbÐQÐQÐQð �Ð ð !ð !€SØ„(×Ò˜˜RÑ Ô Ð Ð Ø œHÔ4Ð:¸€„Ôð
ð 
ð 
ð 
ð 
ð 
ð 
�6ñ 
ô 
ð 
ð €s�u„u€Ø�FŠF�? DÑ)Ô)€„Ø€„Ø	€à€Øð ð €SÝ
„l�9Ô #¨4Ð0Ñ0Ô0€!Ø‡,‚,ˆq�/„/€/Ø€!„&Ø
€!„%Ø€!„&Ø€!„&õ Ô!¥#¥b¨¡e¤e¡*¤*¨d¬kÑ:Ô:€!„(à	ˆS€[€[Ø€:ˆc�$ŒiÑøð ð 
ð 
€QÝŒ]˜1œ6Ÿ:š: n°bÑ9Ô9Ñ:Ô:ð ð €cØ	�CŒ€3Ø
ð /Ý
Ð'¨#Ñ-Ñ
.Ô
.Ð.Ø„=×Ò�QÑÔÐÐÝŒ]˜1œ6Ÿ:š: m°RÑ8Ô8Ñ9Ô9ð ð €cØ	�CŒ€3Ø
ð /Ý
Ð'¨#Ñ-Ñ
.Ô
.Ð.Ø„;‡?‚?�3ÑÔÐÐð	ðð ð ð ð õ ”O C­¬Ô)=Ñ>Ô>Ð>€„�Ý”×+Ò+Ñ-Ô-€ÔØˆ2‰4Œ4€„à‡‚ˆiÑÔÐØ‡‚�„€ð ð ð €QØ„(Ô×ÒÑÔÐÐà‡‚Ð,Ñ-Ô-Ð-Ø„Gð dØŒ7ð dð d€aÝˆa�˜DÑ!Ô!ð dØ‡K‚K�”	ÑÔÐØ‡L‚L�˜u€LÑ%Ô%Ð%Ý
Œ/ÐbÑ
cÔ
cÐcðdð
 €Ø
ð ð €QØ„X•d”l¥D¤LÐ1Ð1Ð1Ø�AÑ€=øàð Ø€$„,ˆr�vŠv�hÐ 0°=Ñ @ÑAÔAÐXÐXÈÐXÐUWÐXÐXÐXÐXà€$„,ÐÐ˜2ÐÐÐà
ð jð j€QØ„X•”ÒÐØ„f‡j‚j�˜dÑ#Ô#ð jØ‡J‚Jˆr�vŠv�jÑ!Ô!ÐhÐ%hÑiÔiÐiøðjð jre   rï   c                 ó°  — t          | j        j        d         ¦  «        dk    rd S | j                             ¦   «          |dk    rddg| j        _        n|dk    rddg| j        _        |›d|›d�}	 |                      d	t          |¬
¦  «         | j                             ¦   «          d S # | j	        j
        $ r | j                             ¦   «          Y d S w xY w)Nr   é   rï   z-orY   rð   r„  Úshlibz4Checking if the -o link must be split from arguments)r�   r  rÝ   )r-  ra   rÉ  ÚstashÚCCLNK_TGT_FÚCXXLNK_TGT_Fr:  r  ÚcommitrÓ   r9  Úrevert)rˆ   ÚmoderÝ   s      rc   Úcheck_gcc_o_spacerD  6  sð   € åˆŒÔ˜AÔÑÔ !Ò#Ð#à€&Ø„‡‚ÑÔÐØˆC‚K€KØ ˜€$„(ÔÐØ
ˆe‚m€mØ ˜*€$„(ÔØ ˜D˜D $ $ $Ð'€ðØ‡*‚*ÐGÕRdÐow€*ÑxÔxÐxð „(‡/‚/ÑÔÐÐÐøð 	ŒÔ&ð ð ð Ø„(‡/‚/ÑÔÐÐÐÐðøøøs   Á1B) Â)(CÃC)NFN)TrY   )rY   )rY   rY   FTFTrY   )TFrY   )FFF)rï   );rP  Ú
__future__r   rI  r×  r}   Úwaflibr   r   r   r   r   r	   r
   Úwaflib.TaskGenr   r   Úwaflib.Configurer   rv  rh  r  r  rÂ  rÇ  r•   r«   rË   rÙ   ré   r%  r6  r:  r  rX  r\  r^  rb  rd  r´   r  r.  ro  rq  r¨   r‚  r  r“  r•  r˜  rž  r   rÒ  rÞ  rä  rç  ré  r:  rD  rù   re   rc   ú<module>rI     s³  ðð
ð ð &Ð %Ð %Ð %Ð %Ð %à Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ø DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DØ 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø !Ð !Ð !Ð !Ð !Ð !à€Ø (à
€Ø
€ðÐ ðØ °7ðà 	°5ðð °9ðð °8ð	ð
 °9ðð °7ðð 	°6ðð °6ðð °5ðð °8ðð °8ðð °6ðð 	°7ðð 	°7ðð  0°8ð!ð" 1°8ð#ð$ 
°5ð%ð& °6ð'ð €ð,Ø �ðà �ðð �ðð �ð	ð
 �ðð �ðð �ðð �	ðð �ðð 
�ðð �ðð �	ðð 
�	ðð �ðð �ðð  �ð!ð" �ð#ð$ Øð'ð ð Ð ð, ðp(ð p(ð p(ñ „ðp(ðd ð1<ð 1<ñ „ð1<ðf ðYð Yñ „ðYðv ð)ð )ñ „ð)ðV3ð 3ð 3ð  ð^1ð ^1ñ „ð^1ð@ ð=ð =ñ „ð=ð~ ð$ð $ñ „ð$ðLeð eð eð eð e�”	ñ eô eð eð* 	€ˆÑÔØ€ˆlÑÔð
:ð 
:ñ Ôñ Ôð
:ð ðð ñ „ðð ðð ñ „ðð ð
ð 
ñ „ð
ð ðð ñ „ðð ð#'ð #'ð #'ñ „ð#'ðJ ð'ð 'ð 'ñ „ð'ð  ð&ð &ð &ñ „ð&ð. ðð ñ „ðð" ðð ñ „ðð  ð
Hð 
Hñ „ð
Hð ð/ð /ð /ñ „ð/ðb ð-ð -ð -ñ „ð-ð^ ð(ð (ñ „ð(ð ð*ð *ñ „ð*ð ð)ð )ñ „ð)ð ðð ñ „ðð ðð ñ „ðð ðU
ð U
ð U
ñ „ðU
ðn ð5ð 5ñ „ð5ð. ð7ð 7ñ „ð7ð@ ð9ð 9ñ „ð9ð=?ð =?ð =?ð =?ð =?ˆdŒiñ =?ô =?ð =?ð~ ðojð ojñ „ðojðb ðð ð ñ „ðð ð re   