§
    Ü+ög’  ã                   ó†   — d Z dddddddddd	d
œ
Zg d¢ZddlZddlmZmZmZmZm	Z	m
Z
mZmZ ddlmZ d„ Zd„ Zd„ Zd„ Zd„ ZdS )zs
Common mistakes highlighting.

There is a performance impact, so this tool is only loaded when running ``waf -v``
ÚfeaturesÚsourceÚtargetÚincludesÚexport_includesÚdefinesÚinstall_pathÚis_copyÚuse)
ÚfeatureÚsourcesÚtargetsÚincludeÚexport_includeÚdefineÚ
importpathÚinstallpathÚiscopyÚuses)Ú__call__ÚprogramÚshlibÚstlibÚobjectsé    N)ÚLogsÚBuildÚNodeÚTaskÚTaskGenÚ	ConfigSetÚErrorsÚUtils)Úccrootc                 óô  ‡‡— t          j        t          ¦  «        Ši Šˆˆfd„}| j        D ]8}|D ]3}	 |j        D ]} ||¦  «         ŒŒ# t
          $ r  ||¦  «         Y Œ0w xY wŒ9d}‰                     ¦   «         D ]ï\  }}t          |¦  «        dk    r×d}d|›dt          j	        dk    rdpd›d	�}t          j
        |¦  «         |D ]�}	t          j	        dk    r2t          j
        d
d|                     |	¦  «        z   |	j        ¦  «         ŒDt          j
        dd|                     |	¦  «        z   |	j        j        t          |	j        dd ¦  «        ¦  «         Œ�t          j
        d¦  «         Œð|sŠ‰                     ¦   «         D ]w\  }}t          |¦  «        dk    r]t          j
        d¦  «         |j        j        }
t          j	        dk    r|j        }
|D ]#}t          j
        d|j        j        ||
¦  «         Œ$Œvd S d S )Nc                 ó\  •— t          | t          j        ¦  «        sd S t          | d¦  «        rd S | j        D ]}‰|                              | ¦  «         Œ	 ‰|                      ¦   «                                       | ¦  «         d S # t          $ r | g‰|                      ¦   «         <   Y d S w xY w)NÚno_errcheck_out)Ú
isinstancer   ÚhasattrÚoutputsÚappendÚuidÚKeyError)ÚtskÚnodeÚmpÚuidss     €€ú*/git_repos/avwlv2/waflib/Tools/errcheck.pyÚ
check_taskz&check_same_targets.<locals>.check_task"   s½   ø€ Ý	�C�œÑ	#Ô	#ð 
Ø	€6ÝˆSÐ#Ñ$Ô$ð 
Ø	€6àŒkð ð €dØ€d„8‡?‚?�3ÑÔÐÐðØˆ�Š‰	Œ	„?×Ò˜#ÑÔÐÐÐøÝ	ð ð ð Ø�U€4ˆ�Š‰	Œ	�?€?€?€?ðøøøs   Á-B Â"B+Â*B+Fé   Tz* Node z is created more than oncez (full message on 'waf -v -v')Ú z. The task generators are:z  %d. %rz  %d. %r in %rÚpathzLIf you think that this is an error, set no_errcheck_out on the task instancez�* Several tasks use the same identifier. Please check the information on
   https://waf.io/apidocs/Task.html?highlight=uid#waflib.Task.Task.uidé   z   - object %r (%r) defined in %r)r"   ÚdefaultdictÚlistÚgroupsÚtasksÚAttributeErrorÚitemsÚlenr   ÚverboseÚerrorÚindexÚ	generatorÚnameÚgetattrÚ	__class__Ú__name__)Úselfr2   ÚgÚtgr-   ÚdupeÚkÚvÚmsgÚxÚ
tg_detailsr/   r0   s              @@r1   Úcheck_same_targetsrO      sŽ  øø€ ÝÔ�ÑÔ€Ø
€ðð ð ð ð ð ð Œ+ð ð €QØð ð €bðØŒxð ð ˆØ€Z��_„_€_€_ðøå
ð ð ð à€Jˆr�N„N€N€N€Nðøøøð	ð 	€Ø�xŠx‰zŒzð 
^ð 
^�V€aˆÝˆ�V„Vˆa‚Z€ZØ
€4€4ØNOÈaÈaÕQUÔQ]ÐabÒQbð  RHð  hHð  RNð  LNð  RNð  RNð  
O€3Ý„:ˆc�?„?€?Øð hð h€qÝ„|�aÒÐÝ	„Z�
˜A §¢¨¡
¤
™N¨A¬KÑ8Ô8Ð8Ð8å	„ZÐ  ! a§g¢g¨a¡j¤j¡.°!´+Ô2BÅGÈAÌKÐY_ÐaeÑDfÔDfÑgÔgÐgÐgÝ„:Ð\Ñ]Ô]Ð]øàð ]Ø—
’
‘”ð ]ð ]�f€qˆ!Ý	ˆ!�f„fˆq‚j€jÝ„Jð  bñ  cô  cð  cØ”Ô#€JÝ„|�aÒÐØ”-€ZØð ]ð ]ˆÝ	„ZÐ2°C´MÔ4JÈCÐQ[Ñ\Ô\Ð\Ð\øð]ð ]ð]ð ]s   ²AÁA ÁA c           	      ó¶  — t          ¦   «         }t          t          j                             ¦   «         ¦  «        D ]$}|                     t          |¦  «        ¦  «         Œ%t          j        j                             ¦   «         D ]<\  }}| 	                    |¦  «         |                     t          |¦  «        ¦  «         Œ=t          ¦   «         }t          j        j
                             ¦   «         D ]}| 	                    |j        ¦  «         Œ||z  }|r"t          j        dt          |¦  «        ¦  «         t          t          j                             ¦   «         ¦  «        D ]÷}t           j        dk    rTt%          |t          j        ¦  «        r:t'          |j        t*          ¦  «        r t-          j        d|›d|j        ›d�¦  «        ‚dD ]c}t1          j        t5          ||g ¦  «        ¦  «        D ]=}t          j                             |¦  «        st          j        d|||j        ¦  «         Œ>Œdt5          |dd ¦  «        rt          j        d	|j        ¦  «         Œød S )
Nz^The methods %r have invalid annotations:  @extension <-> @feature/@before_method/@after_methodi   zClass z has hcode value z7 of type <str>, expecting <bytes> (use Utils.h_cmd() ?)©ÚbeforeÚafterz1Erroneous order constraint %r=%r on task class %rÚrulezAErroneous attribute "rule" on task class %r (rename to "run_str"))Úsetr8   r   ÚfeatsÚvaluesÚunionÚtask_genÚprecr<   ÚaddÚmappingsrE   r   r?   r   ÚclassesÚsysÚ
hexversionÚ
issubclassr'   ÚhcodeÚstrr!   ÚWafErrorr"   Úto_listrC   Úget)rF   ÚfeatrM   ÚyÚextÚinvalidÚclss          r1   Úcheck_invalid_constraintsrk   O   sC  € Ý‰Œ€Ý
�wŒ}×#Ò#Ñ%Ô%Ñ
&Ô
&ð ð €QØ‡*‚*�S�‰VŒVÑÔÐÐÝÔÔ$×*Ò*Ñ,Ô,ð ð �V€aˆØ‡(‚(ˆ1�+„+€+Ø‡*‚*�S�‰VŒVÑÔÐÐÝ
�u„u€Ý
Ô
Ô
#×
*Ò
*Ñ
,Ô
,ð ð €QØ‡'‚'ˆ!Œ*ÑÔÐÐØ�‰:€Øð ~Ý„*ÐmÕosÐt{Ño|Ôo|Ñ}Ô}Ð}õ •”×$Ò$Ñ&Ô&Ñ'Ô'ð 	að 	a€SÝ„^�iÒÐ¥J¨sµD´IÑ$>Ô$>ÐÅ:ÈcÌiÕY\ÑC]ÔC]ÐÝ	ŒˆÐqtÐqtÐqtÐvyÔvÐvÐvð  Añ  
Bô  
Bð  Bàð Yð Y€aÝŒM�' # q¨"Ñ-Ô-Ñ.Ô.ð Yð Y€qÝŒ<×Ò˜AÑÔð YÝ	„ZÐCÀQÈÈ3Ì<ÑXÔXÐXøðYõ ˆS�&˜$ÑÔð aÝ„:ÐQÐSVÔS_Ñ`Ô`Ð`øð	að 	aó    c                 ó|   ‡— t          t          j        | ¦  «        Šˆfd„}t          t          j        | |¦  «         dS )zu
	Replaces existing BuildContext methods to verify parameter names,
	for example ``bld(source=)`` has no ending *s*
	c                 ó´   •—  ‰| g|¢R i |¤Ž}t           D ]B}||v r<|dk    rdt          | dd¦  «        v rŒ t          j        d|t           |         |¦  «         ŒC|S )Nr   Úsubstr   r4   zFix the typo %r -> %r on %r)ÚtyposrC   r   r?   )rF   rJ   ÚkwÚretrM   Úoldcalls        €r1   Úcallzreplace.<locals>.callo   s   ø€ Øˆ�Ð�qÐÐÐ˜BÐÐ€#Ýð @ð @€aØˆ2€g€gØˆH‚}€}˜¥G¨D°*¸bÑ$AÔ$AÐAÐAØÝ„JÐ,¨aµ°q´¸3Ñ?Ô?Ð?øØ	€*rl   N)rC   r   ÚBuildContextÚsetattr)Úmrt   rs   s     @r1   Úreplacerx   i   sM   ø€ õ
 •5Ô% qÑ)Ô)€ðð ð ð ð õ 	�Ô	˜Q Ñ%Ô%Ð%Ð%Ð%rl   c                  óÎ  ‡	— t           D ]} t          | ¦  «         Œd„ }t          j        j        t          j        _        |t          j        _        ddg ddddfd„}t          j        j        t          j        _        |t          j        _        t          j        Š	ˆ	fd„}|t          _        d„ } t          j
        d	¦  «        |¦  «         d
„ } t          j
        d	¦  «        |¦  «         d„ }t          j        j        t          j        _        |t          j        _        d„ }t          j        j        t          j        _        |t          j        _        dd„}|t$          j        _        dS )zF
	Modifies existing classes and methods to enable error verification
	c                 ó  — |rrt          j        |d         ¦  «        }|D ]U}|                     d¦  «        }d|v rt          j        d|d         ¦  «         d|v rt          j        d|d         ¦  «         ŒV | j        |i |¤ŽS )Nr   ú/z..zEIn ant_glob pattern %r: '..' means 'two dots', not 'parent directory'ú.zDIn ant_glob pattern %r: '.' means 'one dot', not 'current directory')r"   rd   Úsplitr   r?   Úold_ant_glob)rF   rJ   rq   ÚlstÚpatÚsps         r1   Úant_globzenhance_lib.<locals>.ant_glob�   s�   € Øð ^Ý	Œ�q˜”tÑ	Ô	€3Øð ^ð ^€sØ	�Š�3‰Œ€BØˆr€z€zÝ	„ZÐWÐYZÐ[\ÔY]Ñ^Ô^Ð^Ø
ˆb€y€yÝ	„ZÐVÐXYÐZ[ÔX\Ñ]Ô]Ð]øØ	ˆÔ	˜AÐ	$ Ð	$Ð	$Ð$rl   Né   FTc           	      óÐ   — |rJ	 |                       | j        j        ¦  «        r|sd}t          j        d| ¦  «         n# t
          $ r Y nw xY w|                      |||||||¦  «        S )NTzRCalling ant_glob on build folders (%r) is dangerous: add quiet=True / remove=False)Úis_child_ofÚctxÚbldnoder   r?   r;   Úold_ant_iter)rF   ÚacceptÚmaxdepthÚpatsÚdirÚsrcÚremoveÚquiets           r1   Úant_iterzenhance_lib.<locals>.ant_iter�   s�   € Øð 	ð	Ø×Ò˜œÔ(Ñ)Ô)ð l°%ð lØ€UÝ	„ZÐdÐfjÑkÔkÐkøøÝ
ð 	ð 	ð 	Ø€Dð	øøøà	×	Ò	˜6 8¨T°3¸¸VÀUÑ	KÔ	KÐKs   „8= ½
A
Á	A
c                 óh   •—  ‰| |¦  «        }|r" ‰|| ¦  «        rt          j        d| |¦  «         |S )Nz0Contradictory order constraints in classes %r %r)r   r?   )Út1Út2rr   Úolds      €r1   Ú	is_beforezenhance_lib.<locals>.is_before�   sG   ø€ ØˆˆB�‰Œ€#Øð JˆSˆS��R‰[Œ[ð JÝ„:Ð@À"ÀbÑIÔIÐIØ	€*rl   c                 óÚ   ‡— |                       | j        ¦  «        }d|v rt          j        d¦  «         dD ]4Š‰|vr.|r,|d         ˆfd„dD ¦   «         v rt          j        d| ‰¦  «         Œ5d S )Nr   z+feature shlib -> cshlib, dshlib or cxxshlib)ÚcÚcxxÚdÚfcr   c                 ó   •— g | ]}‰|z   ‘ŒS © rœ   )Ú.0rg   rM   s     €r1   ú
<listcomp>z;enhance_lib.<locals>.check_err_features.<locals>.<listcomp>«   s   ø€ Ð)UÐ)UÐ)U°!¨!¨A©#Ð)UÐ)UÐ)Url   )r   r   r   z"%r features is probably missing %r)rd   r   r   r?   )rF   r   rM   s     @r1   Úcheck_err_featuresz'enhance_lib.<locals>.check_err_features¦   s�   ø€ Ø�Š�T”]Ñ#Ô#€#Ø�€^€^Ý„:Ð;Ñ<Ô<Ð<Ø"ð >ð >€aØ
ˆsˆ(ˆ(�sˆ(˜s 1œvÐ)UÐ)UÐ)UÐ)UÐ7TÐ)UÑ)UÔ)UÐUÐUÝ„JÐ3°T¸1Ñ=Ô=Ð=øð>ð >rl   Ú*c                 óz  — t          | d¦  «        sHdt          j        | j        ¦  «        vr-dD ](}t          | |¦  «        rt	          j        d|| ¦  «         Œ)d S dD ]_}|                      t          | |g ¦  «        ¦  «        D ]8}t          j         	                    |¦  «        st	          j
        d||| ¦  «         Œ9Œ`d S )NrT   ro   )rR   rS   Úext_inÚext_outzAErroneous order constraint %r on non-rule based task generator %rrQ   z6Erroneous order constraint %s=%r on %r (no such class))r(   r"   rd   r   r   ÚwarnrC   r   r]   re   r?   )rF   rM   rg   s      r1   Úcheck_err_orderz$enhance_lib.<locals>.check_err_order°   só   € Ý	��vÑ	Ô	ð W wµ%´-ÀÄÑ2NÔ2NÐ'NÐ'NØ4ð ]ð ]€qÝˆt�QÑÔð ]Ý	„YÐRÐTUÐW[Ñ\Ô\Ð\øð]ð ]ð  ð Wð W€qØ�\Š\�' $¨¨2Ñ.Ô.Ñ/Ô/ð Wð WˆÝŒL×Ò˜QÑÔð WÝ
„jÐIÈ1ÈaÐQUÑVÔVÐVøðWðWð Wrl   c                 ó–   — t          | ¦  «         	 |                      ¦   «         }t          | ¦  «         n# t          | ¦  «         w xY w|S ©N)rk   Úorig_compilerO   )rF   rr   s     r1   Úcheck_compilez"enhance_lib.<locals>.check_compile½   sQ   € Ý˜DÑ!Ô!Ð!ðØ	×	Ò	Ñ	Ô	€3å�dÑÔÐÐøÕ�dÑÔÐÐøøøØ	€*s	   ‘5 µAc                 ó~  — 	 | j                              |¦  «        }| j                              | ¦  «        }| j                              |¦  «        }||k    rCd}t          j        dk    r|d| ›d|›�z  }n|d| j        ›d|›d�z  }t          j        |¦  «        ‚n# t          j        $ r Y nw xY w | j        |fi |¤Ž d S )Nz"Invalid 'use' across build groups:r3   z

  target z
  uses:
  ú z uses z% (try 'waf -v -v' for the full error))	ÚbldÚget_tgen_by_nameÚget_group_idxr   r>   rB   r!   rc   Úorig_use_rec)rF   rB   rq   rg   ÚidxÚodxrL   s          r1   Úuse_reczenhance_lib.<locals>.use_recÈ   só   € ðØ„x× Ò  Ñ&Ô&€1ð 
Œ×	Ò	 Ñ	%Ô	%€3Ø	Œ×	Ò	 Ñ	"Ô	"€3Ø	ˆC‚i€iØ
.€CÝ„|�aÒÐØ€S¨d¨d¨d°A°AÐ6Ñ6€S€Sà€SÀ$Ä)À)À)ÈTÈTÈTÐRÑR€SÝ
Œ/˜#Ñ
Ô
Ðð øõ 
Œð ð ð Ø€4ðøøøð €$Ô�DÐÐ˜BÐÐÐÐÐs   ‚B ÂB,Â+B,c                 óô   — |dk    s|dk    rt          j        d¦  «        ‚|dk    rt          j        d¦  «        ‚|| j        v r.t          t          j        | ¦  «                             ||¦  «        S | |         S )Nr*   r[   zKenv.append and env.add do not exist: use env.append_value/env.append_uniqueÚprependz1env.prepend does not exist: use env.prepend_value)r!   rc   Ú	__slots__Úsuperr    Ú__getattr__)rF   rB   Údefaults      r1   Ú_getattrzenhance_lib.<locals>._getattrÜ   s|   € Ø	ˆXÒÐ˜ š˜Ý	ŒÐfÑ	gÔ	gÐgØˆyÒÐÝ	ŒÐLÑ	MÔ	MÐMØ	ˆTŒ^ÐÐÝ
•	Ô# TÑ
*Ô
*×
6Ò
6°t¸WÑ
EÔ
EÐEà
ˆtŒ*Ðrl   r§   )Úmeths_typosrx   r   r‚   r~   r�   rˆ   r   r•   r   r   r   ru   Úcompiler¨   rY   r²   r¯   r    r·   )
rw   r‚   r�   r•   rŸ   r¥   r©   r²   r¹   r”   s
            @r1   Úenhance_libr¼   y   s—  ø€ õ ð ð €QÝ	ˆ!�*„*€*€*ð	%ð 	%ð 	%õ œ)Ô,…„ÔØ…„Ôð  ¨"°2¸5ÀdÐSWÐ_dð Lð Lð Lð Lõ œ)Ô,…„ÔØ…„Ôõ „~€ðð ð ð ð ð
 …„ð>ð >ð >ð …„�ÑÔÐ(Ñ)Ô)Ð)ð	Wð 	Wð 	Wð …„�ÑÔ�oÑ&Ô&Ð&ðð ð õ $)Ô#5Ô#=…ÔÔ Ø+…ÔÔð ð  ð  õ  ")Ô!1Ô!9…ÔÔØ#…ÔÔðð ð ð ð $,…ÔÔ Ð Ð rl   c                 ó"   — t          ¦   «          dS )zn
	Error verification can be enabled by default (not just on ``waf -v``) by adding to the user script options
	N)r¼   )Úopts    r1   Úoptionsr¿   è   s   € õ �„€€€rl   )Ú__doc__rp   rº   r^   Úwaflibr   r   r   r   r   r    r!   r"   Úwaflib.Toolsr#   rO   rk   rx   r¼   r¿   rœ   rl   r1   ú<module>rÃ      s   ðð
ð ð Ø
Ø
Ø
Ø"Ø	ØØØ	Øð	ð 	€ð CÐBÐB€à 
€
€
€
Ø MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MØ Ð Ð Ð Ð Ð ð/]ð /]ð /]ðbað að að4&ð &ð &ð l,ð l,ð l,ð^ð ð ð ð rl   