
    e˫                       d dl mZ ddlmZmZmZmZmZmZ d dl	m
Z
mZ ddlmZmZ d dlmZ ddlmZmZmZmZmZmZmZmZmZmZmZ d dlZd dlZd dlZd dl Z d dl!Z"e"jF                  rdd	lm$Z$  G d
 de
      Z%d>dZ& G d d      Z'd?dZ( G d d      Z) G d de)      Z* G d de)      Z+ G d de)      Z, G d de)      Z- G d de-      Z. G d de-      Z/e0dddgfe1i dfd e0ddfe0ddfe0dg d!fe1i dfd"e0ddfe0dg d#fe2g dfe0d$dfe0d%g d&fd'd(Z3e*e*e+e*e+e+e.e.d)e+e*e/e+e/e+e+e+e*e*e+d*e.e*e.e*e*d+d,Z4 G d- d.      Z5d/d0d1d2d3d4d5d6Z6d@d7Z7dAd8Z8dAd9Z9dAd:Z:dAd;Z;e8e8e9e:e:e;e;d<Z<d= Z=y)B    )annotations   )IntrospectionInterpreterBUILD_TARGET_FUNCTIONSAstConditionLevelAstIDGeneratorAstIndentationGenerator
AstPrinter)MesonExceptionsetup_vsenv)mlogenvironmentwraps)Token	ArrayNodeArgumentNodeAssignmentNodeBaseStringNodeBooleanNodeElementaryNodeIdNodeFunctionNode
StringNode
SymbolNodeN)BaseNodec                      e Zd Zy)RewriterExceptionN)__name__
__module____qualname__     5/usr/lib/python3/dist-packages/mesonbuild/rewriter.pyr   r   %   s    r#   r   c                   | j                  ddt        ddd       | j                  ddd	d
d       | j                  dddd	d
d       | j                  ddd      }|j                  ddgd|      }|j                  ddddd       |j                  dd t        d   d!   d"   d#d$%       |j                  dd&'       |j                  d(g d)d*+       |j                  d,d-d./       |j                  d0d1|2      }|j                  d(t        d0   d(   d"   d*+       |j                  d3t        t        j                               d4+       |j                  d5d6'       |j                  d0d-d7/       |j                  d8d9gd:|      }|j                  d(t        d;   d(   d"   d*+       |j                  d<d-d=/       |j                  d>d?gd@|      }|j                  dAdB'       y )CNz-sz--sourcedir.SRCDIRzPath to source directory.)typedefaultmetavarhelpz-Vz	--verbose
store_trueFzEnable verbose output)actionr)   r+   z-Sz--skip-errorsskipzSkip errors instead of aborting)destr-   r)   r+   r(   zRewriter commandszRewrite command to execute)r/   titledescriptiontargettgtzModify a target)aliasesr+   formatter_classz--subdir subdirzASubdirectory of the new target (only for the "add_target" action))r)   r/   r+   z--typetgt_typetarget_type   
executablez<Type of the target to add (only for the "add_target" action))r/   choicesr)   r+   zName or ID of the target)r+   	operationaddrm
add_target	rm_targetadd_extra_filesrm_extra_filesinfozAction to execute)r<   r+   sources*zSources to add/remove)nargsr+   kwargszModify keyword arguments)r+   r5   functionzFunction type to modifyidz<ID of the function to modify (can be anything for "project")zPairs of keyword and valuedefault-optionsdefz"Modify the project default optionsdefault_optionsoptionsz(Key, value pairs of configuration optioncommandcmdz Execute a JSON array of commandsjsonzJSON string or file to execute)add_argumentstradd_subparsers
add_parserrewriter_keyslistrewriter_func_kwargskeys)parser	formatter
subparsers
tgt_parser	kw_parser
def_parser
cmd_parsers          r$   add_argumentsrb   *   si   
m#sH[vw
k,Tkl
oF<Y^  fG  H&&F:M[w&xJ &&x%GXjs&tJD*bx  OR  SH:}X?VWd?efg?hr~!_  aH+EFK  2G!4  6IS7NO %%h5Oaj%kI;h0G0TUV0W 3  5:t4H4M4M4O/P 9  ;4&de835QR &&'85'Pt  GP&  QJK?P1QR]1^_`1a!4  6IS7ab &&y5'Hj  }F&  GJF)IJr#   c                      e Zd Zd Zd Zy)RequiredKeysc                    || _         y N)rZ   )selfrZ   s     r$   __init__zRequiredKeys.__init__N   s	    	r#   c                2     t               fd       }|S )Nc                    t        |       dk\  sJ | d   }	j                  j                         D ]  \  }}|d   }|d   }|d   }||vr-||||<   n%t        dj	                  |j
                              t        ||   |      s<t        dj	                  ||j
                  t        ||         j
                              |t        |t              sJ ||   |vst        dj	                  ||||                 | i |S )Nr:   r   r   z$Key "{}" is missing in object for {}z8Invalid type of "{}". Required is {} but provided was {}zCInvalid value of "{}": Possible values are {} but provided was "{}")	lenrZ   itemsr   formatr   
isinstancer(   rX   )
wrapped_argswrapped_kwargsrQ   keyvaltypr)   r<   frg   s
           r$   wrappedz&RequiredKeys.__call__.<locals>.wrappedR   s+   |$)))q/C IIOO- QS!fa&a&c>*#*C/0V17QZZ1HJ J!#c(C0+,f-3VCtCPSH~G^G^-_a a&%gt4443xw./0u17Wc#h1OQ Q!Q$ l5n55r#   r   )rg   rt   ru   s   `` r$   __call__zRequiredKeys.__call__Q   s     	q	6 
	6. r#   N)r   r    r!   rh   rv   r"   r#   r$   rd   rd   M   s    r#   rd   c                6    t        t        dddddd|             S )Nr6   r   r   r   )r   r   )rr   s    r$   _symbolry   l   s    eBAq!VS9::r#   c                  F    e Zd ZdddZd Zd Zd Zd Zd Zd Z	d	 Z
d
 Zy)	MTypeBaseNc                    || j                         | _        n|| _        d | _        | j                         D ]   }t	        | j                  |      s|| _        " y rf   )	_new_nodenode	node_typesupported_nodesrn   )rg   r~   is      r$   rh   zMTypeBase.__init__p   sP    <(DIDI%%' 	#A$))Q'!"	#r#   c                    t        d      )Nz1Internal error: _new_node of MTypeBase was calledr   rg   s    r$   r}   zMTypeBase._new_nodez   s     STTr#   c                    | j                   d uS rf   )r   r   s    r$   
can_modifyzMTypeBase.can_modify~   s    ~~T))r#   c                    | j                   S rf   )r~   r   s    r$   get_nodezMTypeBase.get_node   s    yyr#   c                    g S rf   r"   r   s    r$   r   zMTypeBase.supported_nodes       	r#   c                ~    t        j                  dt        j                  t        |       j                        d       y )NzCannot set the value of type--> skippingr   warningboldr(   r   rg   values     r$   	set_valuezMTypeBase.set_value   s'    3TYYtDz?R?R5SUcdr#   c                ~    t        j                  dt        j                  t        |       j                        d       y )NzCannot add a value of typer   r   r   s     r$   	add_valuezMTypeBase.add_value   s'    1499T$Z=P=P3QSabr#   c                ~    t        j                  dt        j                  t        |       j                        d       y )NzCannot remove a value of typer   r   r   s     r$   remove_valuezMTypeBase.remove_value   '    4diiT
@S@S6TVder#   c                ~    t        j                  dt        j                  t        |       j                        d       y )NzCannot remove a regex in typer   r   r   s     r$   remove_regexzMTypeBase.remove_regex   r   r#   rf   r~   zT.Optional[BaseNode])r   r    r!   rh   r}   r   r   r   r   r   r   r   r"   r#   r$   r{   r{   o   s4    #U*ecffr#   r{   c                  4     e Zd Zdd fdZd Zd Zd Z xZS )MTypeStrc                $    t         |   |       y rf   superrh   rg   r~   	__class__s     r$   rh   zMTypeStr.__init__       r#   c                6    t        t        dddddd d            S Nr6   r   )r   r   r   s    r$   r}   zMTypeStr._new_node   s    %B1ar:;;r#   c                    t         gS rf   r   r   s    r$   r   zMTypeStr.supported_nodes   
    |r#   c                8    t        |      | j                  _        y rf   rT   r~   r   r   s     r$   r   zMTypeStr.set_value       e*		r#   rf   r   r   r    r!   rh   r}   r   r   __classcell__r   s   @r$   r   r      s    <%r#   r   c                  4     e Zd Zdd fdZd Zd Zd Z xZS )	MTypeBoolc                $    t         |   |       y rf   r   r   s     r$   rh   zMTypeBool.__init__   r   r#   c                6    t        t        dddddd d            S )Nr6   r   F)r   r   r   s    r$   r}   zMTypeBool._new_node   s    5RAq$>??r#   c                    t         gS rf   )r   r   s    r$   r   zMTypeBool.supported_nodes   s
    }r#   c                8    t        |      | j                  _        y rf   )boolr~   r   r   s     r$   r   zMTypeBool.set_value   s    u+		r#   rf   r   r   r   s   @r$   r   r      s    @&r#   r   c                  4     e Zd Zdd fdZd Zd Zd Z xZS )MTypeIDc                $    t         |   |       y rf   r   r   s     r$   rh   zMTypeID.__init__   r   r#   c                6    t        t        dddddd d            S r   )r   r   r   s    r$   r}   zMTypeID._new_node   s    eBAq!T2677r#   c                    t         gS rf   r   r   s    r$   r   zMTypeID.supported_nodes   	    xr#   c                8    t        |      | j                  _        y rf   r   r   s     r$   r   zMTypeID.set_value   r   r#   rf   r   r   r   s   @r$   r   r      s    8%r#   r   c                  v     e Zd Zdd fdZd Zd Zd ZddZddZd Z	d Z
d	 Zd
 Zd Zd Zd ZddZ xZS )	MTypeListc                $    t         |   |       y rf   r   r   s     r$   rh   zMTypeList.__init__   r   r#   c                p    t        t        d      t        t        dddddd d            t        d            S )N[r6   r   ])r   ry   r   r   r   s    r$   r}   zMTypeList._new_node   s3    |E"b!Q4QS4T'UW^_bWcddr#   c                    t        d      )Nz9Internal error: _new_element_node of MTypeList was calledr   r   s     r$   _new_element_nodezMTypeList._new_element_node   s     [\\r#   c                    t        | j                  t              sL| j                  }| j                         | _        | j                  j                  xj
                  |gz  c_        y y rf   )rn   r~   r   r}   args	arguments)rg   tmps     r$   _ensure_array_nodezMTypeList._ensure_array_node   sG    $))Y/))C(DIIINN$$-$ 0r#   c                     yNFr"   rg   r~   r   s      r$   _check_is_equalzMTypeList._check_is_equal       r#   c                     yr   r"   rg   r~   regexs      r$   _check_regex_matcheszMTypeList._check_regex_matches   r   r#   c                    t        | j                  t              rOt        | j                  j                  j
                        dk(  r#| j                  j                  j
                  d   S | j                  S )Nr   r   )rn   r~   r   rk   r   r   r   s    r$   r   zMTypeList.get_node   sN    dii+499>>++,1yy~~//22yyr#   c                    g S rf   r"   r   s    r$   supported_element_nodesz!MTypeList.supported_element_nodes   r   r#   c                2    t         g| j                         z   S rf   )r   r   r   s    r$   r   zMTypeList.supported_nodes   s    {T99;;;r#   c                    t        |t              s|g}| j                          g | j                  j                  _        |D ];  }| j                  j                  xj
                  | j                  |      gz  c_        = y rf   rn   rX   r   r~   r   r   r   rg   r   r   s      r$   r   zMTypeList.set_value   sg    %&GE!#%		  	DAIINN$$)?)?)B(CC$	Dr#   c                    t        |t              s|g}| j                          |D ];  }| j                  j                  xj
                  | j                  |      gz  c_        = y rf   r   r   s      r$   r   zMTypeList.add_value   sW    %&GE! 	DAIINN$$)?)?)B(CC$	Dr#   c                    fd}t        t              sg| j                          g }| j                  j                  j
                  D ]   |      r|gz  } || j                  j                  _        y )Nc                *    D ]  } |      s y y)NTFr"   )r~   j
equal_funcr   r   s     r$   check_remove_nodez3MTypeList._remove_helper.<locals>.check_remove_node   s$      a#  r#   )rn   rX   r   r~   r   r   )rg   r   r   r   removed_listr   s    ``  @r$   _remove_helperzMTypeList._remove_helper   so    	 %&GE!)) 	$A$Q'#	$ $0		 r#   c                <    | j                  || j                         y rf   )r   r   r   s     r$   r   zMTypeList.remove_value  s    E4#7#78r#   c                <    | j                  || j                         y rf   )r   r   )rg   r   s     r$   r   zMTypeList.remove_regex  s    E4#<#<=r#   rf   r   returnr   r   rT   r   r   )r   rT   )r   r    r!   rh   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s   @r$   r   r      sM    e].<DD0 9>r#   r   c                  >     e Zd Zdd fdZd ZddZd	dZd Z xZS )
MTypeStrListc                $    t         |   |       y rf   r   r   s     r$   rh   zMTypeStrList.__init__  r   r#   c                H    t        t        dddddd t        |                  S r   )r   r   rT   r   s     r$   r   zMTypeStrList._new_element_node  s"    %B1as5zBCCr#   c                B    t        |t              r|j                  |k(  S yr   rn   r   r   r   s      r$   r   zMTypeStrList._check_is_equal  s    dN+::&&r#   c                h    t        |t              r"t        j                  ||j                        d uS yr   rn   r   rematchr   r   s      r$   r   z!MTypeStrList._check_regex_matches  )    dN+88E4::.d::r#   c                    t         gS rf   r   r   s    r$   r   z$MTypeStrList.supported_element_nodes  r   r#   rf   r   r   r   	r   r    r!   rh   r   r   r   r   r   r   s   @r$   r   r   
  s    D

r#   r   c                  >     e Zd Zdd fdZd ZddZd	dZd Z xZS )
MTypeIDListc                $    t         |   |       y rf   r   r   s     r$   rh   zMTypeIDList.__init__  r   r#   c                H    t        t        dddddd t        |                  S r   )r   r   rT   r   s     r$   r   zMTypeIDList._new_element_node"  s"    eBAq!T3u:>??r#   c                B    t        |t              r|j                  |k(  S yr   rn   r   r   r   s      r$   r   zMTypeIDList._check_is_equal%  s    dF#::&&r#   c                h    t        |t              r"t        j                  ||j                        d uS yr   r   r   s      r$   r   z MTypeIDList._check_regex_matches*  r   r#   c                    t         gS rf   r   r   s    r$   r   z#MTypeIDList.supported_element_nodes/  r   r#   rf   r   r   r   r   r   s   @r$   r   r     s    @

r#   r   setdelete)r=   rO   )r   r   r?   remover   rE   rJ   rK   r=   rI   )src_addsrc_rm	target_rm
target_addextra_files_addextra_files_rmrE   r6   r;   )both_librariesr;   jarlibraryshared_libraryshared_modulestatic_library)r2   r=   rF   r7   r9   rN   rI   r2   )languagemethodnativenot_found_messagerequiredstaticversionmodules)build_by_defaultbuild_rpathdependenciesgui_app	link_withexport_dynamicimplibinstallinstall_dirinstall_rpathpie)rN   meson_versionlicensesubproject_dirr  )
dependencyr2   projectc                      e Zd ZdddZd ZddZd Zd Zd ZddZ	dd	Z
 eed
         d        Z eed         d        ZddZ eed         d        Zd Zd Zy)Rewriterc           	        || _         t        |d|t               t               t	               g      | _        || _        g | _        g | _        g | _	        | j                  | j                  | j                  d| _        d | _        y )Nr6   )visitorsr  )	sourcedirr   r   r	   r   interpreterskip_errorsmodified_nodesto_remove_nodesto_add_nodesprocess_default_optionsprocess_kwargsprocess_target	functions	info_dump)rg   r)  	generatorr+  s       r$   rh   zRewriter.__init__h  s    "3Ir9ZhZj  mD  mF  HY  H[  Z\  ]& !#;;))))

 r#   c           	        t        j                  dt        j                  t        j                  j                  | j                  t        j                                     | j                  j                          t        j                  dt        j                  | j                  j                  d                t        j                  dt        j                  | j                  j                  d                y )NzAnalyzing meson file:z  -- Project:descriptive_namez  -- Version:r  )r   logr   ospathjoinr)  r   build_filenamer*  analyzeproject_datacyanr   s    r$   analyze_mesonzRewriter.analyze_mesonv  s    ($))BGGLLQ\QkQk4l*mn  "$))D,<,<,I,IJ\,]"^_$))D,<,<,I,I),T"UVr#   c                    | j                   i | _         || j                   vri | j                   |<   || j                   |   |<   y rf   )r3  )rg   cmd_typecmd_iddatas       r$   add_infozRewriter.add_info|  s@    >>!DN4>>)')DNN8$+/x (r#   c                    | j                   y t        j                  j                  t	        j
                  | j                   d             y )Nr:   )indent)r3  sysstderrwriterR   dumpsr   s    r$   
print_infozRewriter.print_info  s0    >>!

DNN1=>r#   c                    | j                   r*t        j                  d      t        j                  d      fS t        j                  d      t        j                  d      fS )Nz-->skippingaborting)r+  r   r>  yellowredr   s    r$   on_errorzRewriter.on_error  sE    99U#T[[%<<<yy*!555r#   c                2    | j                   ry t        d      )Nz Rewriting the meson.build failed)r+  r   r   s    r$   handle_errorzRewriter.handle_error  s    ?@@r#   r2   c           
         d fd} ||      }|rt        |      dk(  r|d   S t        j                  dt        j                  |             |D ]F  }t        j                  dt        j                  |d         dt        j                  |d                H t        j                  d	g j	                            j                          y d }| j                  j                  v rZ j                  j                  |   }t        |t              r1|j                  j                  d
v r j                  j                  |   }|S )Nnamec                h    g }j                   j                  D ]  }| |d   |d   hv s||gz  } |S )NrU  rK   )r*  targets)rU  resultr   rg   s      r$   
check_listz(Rewriter.find_target.<locals>.check_list  sJ    F%%-- "AfIqw//qcMF" Mr#   r   r   z#There are multiple targets matchingz  -- Target namezwith IDrK   z1Please try again with the unique ID of the target>   r  r  r;   r
  r  r	  r  )rU  rT   r   zT.List[BaseNode])rk   r   errorr   rQ  rS  r*  assignmentsrn   r   	func_namer   assign_vals)rg   r2   rY  rW  r   r3   r~   s   `      r$   find_targetzRewriter.find_target  s#   	 V$7|q qz!

@$))FBST  hAJJ1499QvY3GTXT]T]^_`d^eTfgh

NaQUQ^Q^Q`a!!# T%%111##//7D$->>''  ,S  S**66v>C
r#   c                @    d fd} ||      }||S | j                   j                  v rr j                   j                  |   }t        |t              rI|j                  j
                  dk(  r0 j                   j                  |j                        d   } ||      }|S )Nc                T    j                   j                  D ]  }| |d   k(  s|c S  y )NrU  )r*  r  )rU  r   rg   s     r$   rY  z,Rewriter.find_dependency.<locals>.check_list  s4    %%22 1V9$H r#   r#  r   )rU  rT   )r*  r[  rn   r   r\  r   flatten_argsr   )rg   r#  rY  depr~   rU  s   `     r$   find_dependencyzRewriter.find_dependency  s    	 $?J ))555##//
;D$->>''<7++88CAFD$T*C
r#   rN   c                   dddd|d   j                         D cg c]  }| d	 c}id}| j                  |       |d   d	k7  ry d
|d<   g |d   d<   | j                  j                  }i |j                  j                         D ci c]  \  }}t        |      | c}}|j                  j                         D ci c]  \  }}t        |      | c}}|j                  j                         D ci c]  \  }}t        |      | c}}|j                  j                         D ci c]  \  }}t        |      | c}}|j                  j                         D ci c]  \  }}t        |      | c}}}t        |d   j                               D ]}  \  }}	||vrIt        j                  dt        j                  |      g| j                           | j                          S	 ||   j                  |	      }	|d   dxx   | d|	 gz  cc<    | j                  |       y c c}w c c}}w c c}}w c c}}w c c}}w c c}}w # t        $ rp}
t        j                  dt        j                  |      t        j                  t        |
            g| j                           | j                          Y d }
~
)d }
~
ww xY w)Nr$  /r   rN   rO   z=.*r   r=   r   r?   rI   zUnknown optionszUnable to set=)rZ   r0  r*  coredatarO   rl   rT   sortedr   rZ  r   rQ  rS  validate_valuer   rP  )rg   rQ   x
kwargs_cmdcdatakvrO   rq   rr   es              r$   r/  z Rewriter.process_default_options  s    "'!s9~7J7J7L#M!qcI#M	

 	J' {u$"'
;24
8./  ))
%*]]%8%8%:;TQs1vqy;
%*]]%8%8%:;TQs1vqy;
 &+]]%8%8%:;TQs1vqy;
 &+]]%8%8%:;TQs1vqy;	

 &+]]%8%8%:;TQs1vqy;
 s9~3356 	HHC'!

,diinOt}}O!!#cl11#6 x !233%q7GG3	H 	J'I $N <;;;; " 

?DIIcNDHHSV<L_t}}_!!#s<   H,H1>H75H=,I#I	.I	KA%KKrI   c                   t        j                  dt        j                  |d         dt        j                  d|d   z   dz                |d   t        vr8t        j
                  d|d   g| j                           | j                         S t        |d      }d }d }|d   dk(  rwdd	hj                  |d   h      r=t        j
                  d
|d   z   dz   g| j                           | j                         S | j                  j                  }|j                  }n_|d   dk(  r(| j                  |d         }|rA|d   }|j                  }n/|d   dk(  r'| j                  |d         }|r|d   }|j                  }|st        j
                  d       t        |t              sJ t        |t               sJ |j"                  j%                         D ci c]  \  }}|j&                  | c}}|_        |d   dk(  ri }t)        |j"                  j%                               D ]  \  }	}
d ||	<   t        |
t*              r|
j&                  ||	<   +t        |
t,              s<g }|
j                  j.                  D ]&  }d }t        |t*              r|j&                  }||gz  }( |||	<    | j1                  ddj3                  |d   |d         |       y d}t)        |d   j%                               D ]  \  }	}
|	|vrIt        j
                  dt        j                  |	      g| j                           | j                          T|d   dk(  rv|	|j"                  v r=t        j                  dt        j                  |	      d       |j"                  |	= |dz  }n*t        j                  dt        j                  |	      d       |	|j"                  vrd |j"                  |	<    ||	   |j"                  |	         }|j5                         s*t        j                  dt        j                  |	      d       t7        |
      }|d   dk(  rQt        j                  dt        j                  |	      d t        j8                  |             |j;                  |
       n|d   d!k(  rPt        j                  d"t        j8                  |      d t        j                  |	             |j=                  |
       n|d   d#k(  rPt        j                  d$t        j8                  |      d%t        j                  |	             |j?                  |
       nW|d   d&k(  rOt        j                  d't        j8                  |      d%t        j                  |	             |jA                  |
       |jC                         |j"                  |	<   |dz  } |j"                  j%                         D ci c]   \  }}tE        tG        d(d(dddd |            |" c}}|_        |j"                  j%                         D ]  \  }}|jH                  |_$         |dkD  r&|| jJ                  vr| xjJ                  |gz  c_%        y y y c c}}w c c}}w ))NzProcessing function typerJ   zwith id'rK   zUnknown function typer$  re  z//z>The ID for the function type project must be "/" or "//" not ""r2   r~   r#  z Unable to find the function noder=   rE   rI   z{}#{}r   zCannot modify unknown kwargr   z  -- Deletingzfrom the kwargsr   z  -- Keyzis already deletedz  -- Skippingz"because it is to complex to modifyr   z  -- Settingtor?   z  -- Addingr   z  -- Removingfromr   z!  -- Removing all values matchingr6   )&r   r7  r   r>  rY   rZ  rQ  rS  
isdisjointr*  project_noder   r^  rc  rn   r   r   rI   rl   r   rh  r   r   r   rD  rm   r   rT   rO  r   r   r   r   r   r   r   levelr,  )rg   rQ   
kwargs_defr~   arg_noder   rm  rn  	info_datarq   rr   	data_listr   elementnum_changedmodifierval_strs                    r$   r0  zRewriter.process_kwargs  s   +TYYs:-GTXT]T]^adghldm^mps^sTtuz?"66JJ.JR$--/R$$&&)#j/:
 z?i'
 T{%%s4yk2

[^abf^ggjmm  Aptp}p}p  A((**##00DyyH_(""3t9-C6{99_,&&s4y1C6{99JJ9:$---(L1112://2G2G2IJ$!Q177A:J {v%I"8??#8#8#:; /S!%	#c>2%(YYIcNY/ "I XX// /"&%a8&'ggG!gY.		/
 &/IcN/ MM(GNN3z?CI$NPYZ s8}2245 '	HC*$

8$))C.[4==?[!!# ;8+(//)HH_diin>OP ,1$KHHZ39MN(//)'+$&z#xs';<H&&($))C.:^_ #hG;5(3t{{7?ST""3'[!U*G(<dDIIcNS""3'[!X-$++g*>		RUW%%c*[!^3<dkk'>RTZ\`\e\efi\jk%%c* $,#4#4#6HOOC 1KO'	T S[RaRaRgRgRij$!Q6%B1aq"ABAEjOO))+ 	DAqggAG	?t4+>+>>D6)  ??I KB ks   Y(%Y.c                    |j                   rE|j                   | j                  j                  v r#| j                  j                  |j                      S y rf   )ast_idr*  reverse_assignment)rg   r~   s     r$   find_assignment_nodezRewriter.find_assignment_node^  s>    ;;4;;$*:*:*M*MM##66t{{CCr#   c                   #$%&' t        j                  dt        j                  |d         dt        j                  |d                 j	                  |d         ''S|d   dk7  rKt        j
                  dt        j                  |d         g j                            j                         S dC 'fd}'|d   D cg c]
  } ||       c}|d<   d $g }|d   d	k(  rd }'d   r	'd   d
   }n'd   }|J g }'d   D ]0  } $|      D ]#  }t        |t              s||j                  gz  }% 2 g }	t        t        |d               D ]  }||v r+t        j                  dt        j                  |      d       2t        j                  dt        j                  |      dt        j                  |j                   d|j                                 t#        d|j                  d
d
d
d |      }
|	t%        |
      gz  }	 d }t        |t&        t(        f      r|j*                  }nt        |t,              r|}|J |xj.                  |	z  c_        ||vrt        |t&              s||gz  }| j0                  vrU xj0                  |gz  c_        n=|d   dk(  r9$'fd}|d   D ](  } ||      \  }}|+t        j2                  dt        j                  |      d       <d }t        |t&        t(        f      r|j*                  }nt        |t,              r|}|J t        j                  dt        j                  |      dt        j                  |j                   d|j                                 |j.                  j5                  |       ||vrt        |t&              s||gz  }| j0                  vs xj0                  |gz  c_        + n|d   dk(  r'd   }d}	 'd   d
   }t        |tB              r) jD                  jF                  |j                     }|g'd<   t        |t(              sLt        j
                  d!t        j                  |d         d"g j                            j                         S g }'d   D ]0  } $|      D ]#  }t        |t              s||j                  gz  }% 2 g }	t        t        |d               D ]  }||v r+t        j                  d#t        j                  |      d       2t        j                  d$t        j                  |      dt        j                  |j                   d|j                                 t#        d|j                  d
d
d
d |      }
|	t%        |
      gz  }	 |j*                  }|xj.                  |	z  c_        ||vr||gz  }|r| j0                  vr xj0                  |gz  c_        n|d   d%k(  r$'fd&}|d   D ]  } ||      \  }}|+t        j2                  d't        j                  |      d       ;|j*                  }t        j                  d(t        j                  |      dt        j                  |j                   d|j                                 |j.                  j5                  |       ||vrt        |t&              s||gz  }| j0                  vs xj0                  |gz  c_         n|d   dk(  r'Lt        j
                  d)t        j                  |d         d*g j                            j                         S tI        jJ                  d+d,|d         }|d-   d.k(  r|d/z   nd0}|d1z   }tL        jN                  jQ                  |d2   tR        jT                        }t-        t#        d|d
d
d
d d            }t)        tA        d      |tA        d            }t-        t#        d|d
d
d
d d            }t'        tC        t#        d3|d
d
d
d4d5            tA        d6      |tA        d7            }tW        tC        t#        d3|d
d
d
d4|            tA        d8      |      }|d   D cg c]  }t%        t#        d|d
d
d
d |             c}|_        |g|_        t-        t#        d|d
d
d
d d            }t'        tC        t#        d3|d
d
d
d4|d-               tA        d6      |tA        d7            }tW        tC        t#        d3|d
d
d
d4|            tA        d8      |      }t%        t#        d|d
d
d
d |d               tC        t#        d|d
d
d
d |            g|_        |jY                  t[                      |jY                  t[                       xj\                  ||gz  c_.        n/|d   d9k(  r j_                  'd         }|'d   } xj`                  |gz  c_0        t        j                  d:t        j                  |d         dt        j                  |j                   d|j                                 n|d   d;k(  rg }'d   D ]0  } $|      D ]#  }t        |t              s||j                  gz  }% 2 g }'d   D ]0  } $|      D ]#  }t        |t              s||j                  gz  }% 2 'd<   ||d=}  jc                  d'd3   |        |D ]}  }d> %%fd?##fd@&|j.                  D cg c]  }t        |t              r| }!}|j.                  D cg c]  }t        |t              s| }"}t        |"&fdAB      }"|!|"z   |_         y c c}w # t6        $ r
 	 t9        d |j*                  j:                  j=                         D              }|j*                  j:                  |   }n# t>        $ r t)        tA        d      t-        t#        d|j                  d
d
d
d d            tA        d            }||j*                  j:                  tC        t#        d|j                  d
d
d
d d            <   d }| j0                  vr xj0                  |gz  c_        Y nw xY w|g'd<   Y }w xY wc c}w c c}w c c}w )DNzProcessing targetr2   r=   r  zUnknown targetc                   t         j                  j                  t         j                  j                  j                  d               }t         j                  j                  |       r t         j                  j                  | |      S t         j                  j                  |       s| S t         j                  j                  t         j                  j                  |       |      S )Nr7   )r8  r9  abspathr:  r)  isabsrelpathexists)srcr7   rg   r2   s     r$   
rel_sourcez+Rewriter.process_target.<locals>.rel_sourcel  s    WW__RWW\\$..&BR%STFww}}S!wwsF33WW^^C(
77??277??3#7@@r#   rF   c                N   g }t        | t              rNt        | j                  j                        }| j
                  j                  t        v r|j                  d       |S t        | t              r| j                  j                  }|S t        | t              r| j                  }|S )Nr   )rn   r   rX   r   r   r\  r   r   popr   r   )nr   s     r$   arg_list_from_nodez3Rewriter.process_target.<locals>.arg_list_from_nodey  s    D!\*AFF,,-;;$$(>>HHQK
 K	 Ay)vv'' K A|,{{Kr#   r   r   r~   z  -- Sourcez.is already defined for the target --> skippingz  -- Adding sourceat:stringr  c                    d   D ]7  } |      D ]*  }t        |t              s|j                  | k(  s$||fc c S  9 y)NrF   NNr   r  r   r   r  r2   s      r$   	find_nodez*Rewriter.process_target.<locals>.find_node  sN    	* ,A/2 ,%a8 ww#~'(!t,,
 "r#   z  -- Unable to find sourcezin the targetz  -- Removing sourcert  r  Textra_filesc              3  b   K   | ]'  }t        |t              s|j                  d k(  s$| ) yw)r  Nr   ).0rm  s     r$   	<genexpr>z*Rewriter.process_target.<locals>.<genexpr>  s9       +MYcdegmYnstszsz  L  tL1  +Ms   ///r   r6   z[]r   FTargetz#extra_files argument must be a listz  -- Extra filez  -- Adding extra filer  c                    d   D ]7  } |      D ]*  }t        |t              s|j                  | k(  s$||fc c S  9 y)Nr  r  r   r  s      r$   r  z*Rewriter.process_target.<locals>.find_node  sN    . ,A/2 ,%a8 ww#~'(!t,,
 "r#   z  -- Unable to find extra filez  -- Removing extra filezCan not add targetzbecause it already existsz[- ]_r9   r;   _exe_lib_sourcesr7   rK   rx   files()rf  r  z  -- Removing targetrE   rU  )rU  rF   r  c                X    | j                         rt        |       S | j                         S rf   )isdigitintlower)texts    r$   <lambda>z)Rewriter.process_target.<locals>.<lambda>d  s    3t9 DJJL r#   c                b    t        j                  d|       D cg c]
  } |       c}S c c}w )Nz([0-9]+))r   split)rq   cconverts     r$   r  z)Rewriter.process_target.<locals>.<lambda>e  s%    BHHZQT<U'Vq
'V 'Vs   ,c                    t        | j                  d            D cg c]!  \  }}| j                  d      |k   |      f# c}}S c c}}w )Nre  )	enumerater  count)rq   idxrj  alphanum_keys      r$   r  z)Rewriter.process_target.<locals>.<lambda>f  sE    _hilirirsviw_x'yU[UXZ[33)>Q(P'y 'ys   &A	c                (     | j                         S rf   )r   )rj  path_sorters    r$   r  z)Rewriter.process_target.<locals>.<lambda>j  s    K4H r#   )rq   )r  rT   r   rT   )2r   r7  r   r>  r^  rZ  rQ  rS  rn   r   r   rh  r   greenrO  filenamelinenor   r   r   r   r   r   r   r,  r   r   
IndexErrornextrI   rZ   StopIterationry   r   r*  r[  r   subr8  r9  r:  r   r;  r   acceptr	   r.  r  r-  rD  )(rg   rQ   r  rj  to_sort_nodesr~   src_listr   r   	to_appendtokenry  r  rootstring_nodetgt_function
mark_arrayextra_files_keyextra_files_listid_base	target_id	source_idr  src_arg_nodesrc_arr_nodesrc_far_nodesrc_fun_nodesrc_ass_nodetgt_arg_nodetgt_fun_nodetgt_ass_node	to_remove	test_dataunknownrF   r  r  r  r  r2   s(   `                                  @@@@@r$   r1  zRewriter.process_targetc  si   $diiH&>TYYWZ[fWgMhi!!#h-0>c+.,>JJ'3x=)ATDMMOT$$&&	A 58^DjmDC	N
	 {y(Di i(+f~### HI& .+A. .A!!^4 QWWI-.. ICI/0 1=HH]DJJqM;kl-tzz!}da}%EFHhq!QaHj/00	1 H$y 9:99D,/''')+ },Zl5S(+4...##v-#)" ^ 2$-aL!k<LL!=tzz!}o^  d\9$=>#yyHl3#H+++/A(<(<'=Q{?Q?Q>R%STV""))+6 =0D,9W!hZ/Mt222''D61'-20 !22)/LJ/m,Q/ $'''33DJJ?)-}%dI.

8TYYs8}%=?dwgkgtgtgvw((**  "M* 6+A. 6A!!^4(QWWI5(66 ICI/0 1((HH.

1?op14::a=$a}%EFHhq!QaHj/00	1 yyH)+ },(+ d$*=*==##v-#!11" ^ 2$-aL!k<LL!A4::a=Rab  993TZZ]F(<(<'=Q{?Q?Q>R%STV""))+6 =0D,9W!hZ/Mt222''D61'#2& -!

/3x=1IKfyimivivixy((**ffWc3x=9G,/,>,,N&(TZI*,Iww||CM;3M3MNH (h!Q4QS(TUL$WS\<NL'h!Q4QS(TUL'uT8Q1fV]/^(_ahilamo{  ~E  FI  ~J  KL)&tXq!QPVXa1b*celmpeqs  ALgjktgu%vbcjx1aQRTXZ[1\&]%vL"&2^L" (h!Q4QS(TUL'uT8Q1fVYZgVh/i(jlstwlx  {G  IP  QT  IU  VL)&tXq!QPVXa1b*celmpeqs  AL58Q1dCMRSuXxAq$	JK&L"
  7 9: 7 9:,!==,11&.AI "6N	  YK/ HH+TZZH-F[[I$6$6#7q9I9I8J!KLN 'HI& .+A. .A!!^4 QWWI-..  "M* 6+A. 6A!!^4(QWWI5(66
 v#/I
 MM(F4L)<  	,APGVLzK"#++SQZ>5RqSGS"#++OQA~1NqOGOW*HIG!G+AK	,[ EB  /	>&*  +Ml6G6G6N6N6S6S6U  +M  'MO',,33ODD$ >$WS\<b,J_J_abdeghjnpt@u3vx  AD  yE  FD ~BL%%,,VE(LDYDY[\^_abdhjw4x-yz!&J#4+>+>>++~=+> *.}%/@ &wb TOs\   m,m ,!q56q:q: q?6q?
q2)An76q27B+q%"q2$q%%	q21q2c           	         d|vrt        d      |d   | j                  vr?t        dj                  |d   t        | j                  j	                                            | j                  |d      |       y )Nr(   zCommand has no key "type"z0Unknown command "{}". Supported commands are: {})r   r2  rm   rX   rZ   )rg   rQ   s     r$   processzRewriter.processm  sq    #$?@@v;dnn,#$V%+VCKdnn>Q>Q>S9T%UW W#s6{#C(r#   c                   t        d | j                  D              sJ t        d | j                  D              sJ t        d | j                  D              sJ t        d | j                  D              sJ | j                  D cg c]  }|dd	 }}|| j                  D cg c]  }|dd	 c}z  }t        |d d	
      }|| j                  D cg c]  }|dd	 c}z  }g }|D ]|  }d}|d   dk(  s|d   dk(  rHt               }|d   j                  |       |j                          |j                  j                         }|d   j                  ||d   |d   d}||gz  }~ i |D ]  }|d   v rt        j                  j                  t        j                  j                  | j                  |d               }d}	t        j                  j!                  |      st#        |dd      5  	 d d d        t#        |d      5 }
|
j%                         }	d d d        |	j'                  d	      }d}g }|D ]  }||gz  }|t)        |      z  } ||	|d|d   <    fd|D ]4  }|d   dv r	 |       |d   dk(  s|d      dxx   |d   dz   z  cc<   6 j+                         D ]\  \  }}t-        j.                  dt-        j0                  |             t#        |d   dd      5 }
|
j3                  |d          d d d        ^ y c c}w c c}w c c}w # 1 sw Y   ,xY w# 1 sw Y   xY w# 1 sw Y   xY w)Nc              3  l   K   | ],  }t        |d       xr t        |d      xr t        |d       . ywr  colnor  Nhasattrr  rj  s     r$   r  z)Rewriter.apply_changes.<locals>.<genexpr>v  s3     x_`71h'ZGAw,?ZGAzDZZx   24c              3  l   K   | ],  }t        |d       xr t        |d      xr t        |d       . ywr  r  r  s     r$   r  z)Rewriter.apply_changes.<locals>.<genexpr>w  s3     y_`71h'ZGAw,?ZGAzDZZyr  c              3  H   K   | ]  }t        |t        t        f        y wrf   )rn   r   r   r  s     r$   r  z)Rewriter.apply_changes.<locals>.<genexpr>x  s     Y:a)\!:;Ys    "c              3  R   K   | ]  }t        |t        t        t        f       ! y wrf   )rn   r   r   r   r  s     r$   r  z)Rewriter.apply_changes.<locals>.<genexpr>y  s     jPQ:a)^\!JKjs   %'modify)r~   r-   r@   c                >    | d   j                   | d   j                  fS )Nr~   )r  r  )rj  s    r$   r  z(Rewriter.apply_changes.<locals>.<lambda>}  s    qy7G7G66Y r#   T)rq   reverser?   r6   r-   r~   filerT   r~   r-   r  wutf-8encodingr   )r9  rawoffsetsc                >   | d      d   }| d      d   }| d   }|j                   dz
  }|j                  }||   |z   }|}t        |t        t        f      r ||j
                  dz
     |j                  z   }nt        |t              r|| d   dk(  rtt        |j                  t        t        f      r% 	| d   d|j                  dd	       | d      d   }||   d
k7  r|dz  }||   d
k7  r|dz  }||   dv r|dz  }||   dv r|d | | d   z   ||d  z   | d      d<   y )Nr  r  r  r~   r   r-   r@   r6   r  rf  >   	
 rT   )	r  r  rn   r   r   
end_lineno	end_colnor   r   )
r   r  r  r~   linecolstartendr  remove_nodes
           r$   r  z+Rewriter.apply_changes.<locals>.remove_node  s[   AfI&y1G&	"5)CV9D;;?D**CDMC'EC$L 9:doo12T^^C D.1akT6Idjj9l*CD62tzz]a bc&	*51C#h#o1HC #h#oq#h"331HC #h"33 '*&5kAeH&<s34y&HE!F)U#r#   >   r@   r  r  rT   r  	Rewritingr9  )allr,  r-  rh  r.  r
   r  post_processrX  stripr  r8  r9  realpathr:  r)  r  openread
splitlinesrk   rl   r   r7  rO  rI  )rg   rj  
work_nodesstr_listr   new_dataprinterrC  fpathfdatafpm_linesoffsetline_offsetsr   rq   rr   r  r  s                    @@r$   apply_changeszRewriter.apply_changesu  sa   xdhdwdwxxxxydhdxdxyyyyYTEXEXYYYYjUYUiUijjjj?C?R?RS!qH5S
SD<P<PQqT2QQ
J,Ycgh
T=N=NOU3OO
  	AH{h&!H+*>$,&	  )$$&">>//1&	**&	H+	D H	   	AyE!GG$$RWW\\$..!F)%LMEE77>>%(%w7 eg. ""	" &&t,GFL !(#a& !
 ' E!F))	6	I0  	;A{..A8%ai '1U8d?:'		;  	%HCHH[$++c"23c&k39 %RU$% %	%e TQO8 " "f% %s6   	L&LL1LL*.L7L'	*L4	7M 	N)ninjaF)r)  rT   r4  rT   r+  r   )rA  rT   rB  rT   rC  dict)r2   rT   )r#  rT   )r~   r   r   r   )r   r    r!   rh   r?  rD  rK  rQ  rS  r^  rc  rd   rW   r/  r0  r  r1  r  r
  r"   r#   r$   r&  r&  g  s    W0?
6
A
<* - 123+( 4+(Z -)*h* +h*T
 -)*G, +G,R)[%r#   r&  r   r  r  r  r  r  rE   r>   c                ~    i }t        |       }	 |D ]  }t        |      ||<    	 |S # t        $ r t        d      w xY w)Nz;in_list parameter of list_to_dict must have an even length.)iterr  r  	TypeError)in_listrX  itr   s       r$   list_to_dictr    sZ    F	gBW 	!A RF1I		! M  WUVVWs   ' <c                    d| j                   t        | j                     | j                  | j                  | j
                  dgS )Nr2   )r(   r2   r=   rF   r7   r9   )r2   target_operation_mapr=   rF   r7   r8   rO   s    r$   generate_targetr    s@    ..)'*;*;<??..''  r#   c                v    d| j                   | j                  | j                  t        | j                        dgS )NrI   )r(   rJ   rK   r=   rI   )rJ   rK   r=   r  rI   r  s    r$   generate_kwargsr    s9    $$jj&&w~~.  r#   c                J    d| j                   t        | j                        dgS )NrN   )r(   r=   rO   )r=   r  rO   r  s    r$   generate_def_optsr    s)    !&&0  r#   c                   t         j                  j                  | j                        r6t	        | j                  d      5 }t        j
                  |      cd d d        S t        j                  | j                        S # 1 sw Y   y xY w)Nr  r  )r8  r9  r  rR   r  loadloads)rO   r  s     r$   generate_cmdr    s`    	ww~~gll#',,1 	!R99R=	! 	! zz',,''	! 	!s   A??B)r2   r3   rI   rL   rM   rP   rQ   c                   | j                   st        j                          	 t                t	        | j
                  | j                        }|j                          | j                  +t        j                  d       	 t        j                          yt        | j                     |       }t        |t              st        d      |D ].  }t        |t              st        d      |j!                  |       0 |j#                          |j%                          	 t        j                          y# t&        $ r}|d }~ww xY w# t        j                          w xY w)N)r+  zNo command specifiedr   zCommand is not a listzCommand is not an objectr   )verboser   	set_quietr   r&  r)  r.   r?  r(   rZ  set_verbosecli_type_maprn   rX   r  objectr  r
  rK  	Exception)rO   rewritercommandsr   ro  s        r$   runr(    s   ??G--7<<H <<JJ-.$ 	!  -g6(D)344 	 Aa( :;;Q	 
 	  	   	s+   AD0 BD0 0	E 9D;;E  E Erf   )rr   rT   r   r   )r  zT.List[str]r   zT.Dict[str, str])r   zT.List[dict])>
__future__r   astr   r   r   r   r	   r
   mesonbuild.mesonlibr   r   r6   r   r   	functoolsr   mparserr   r   r   r   r   r   r   r   r   r   r   rR   r8  r   rG  typingTTYPE_CHECKINGr   r   rb   rd   ry   r{   r   r   r   r   r   r   rT   r  rX   rW   rY   r&  r  r  r  r  r  r  r#  r(  r"   r#   r$   <module>r1     s)  0 # J  J ;   _  _  _  _   ??!	 	
!KF >;'f 'fR%y %&	 &%i %I>	 I>V9 () , 4%!23"d#
 $%D$4![\T"	 d#4!~"d#D/\  ,S  T, %	 &# #! (!"1 Bi	% i	%X 
(& ( (r#   