
    e}                       d dl mZ ddlmZ ddlmZ ddlmZ ddlm	Z	 d dl
Zd d	lmZ d d
lmZ d dlZd dlZd dlZej&                  rddlmZ  G d d      Z G d dej.                        Z G d d      Z G d de      Z G d d      Zy)    )annotations   )CMakeException)parse_generator_expressions   )mlog)version_compareNPath)	lru_cache)Environmentc                  F    e Zd ZddZe ed      dd              ZddZy)	CMakeTraceLinec                ~    t         j                  |      | _        || _        |j	                         | _        || _        y N)r   _to_pathfilelinelowerfuncargs)selffile_strr   r   r   s        >/usr/lib/python3/dist-packages/mesonbuild/cmake/traceparser.py__init__zCMakeTraceLine.__init__#   s/    "++H5		JJL		    N)maxsizec                    t        |       S r   r
   )r   s    r   r   zCMakeTraceLine._to_path)   s     H~r   c                ~    d}|j                  | j                  | j                  | j                  | j                        S )NzCMake TRACE: {0}:{1} {2}({3}))formatr   r   r   r   )r   ss     r   __repr__zCMakeTraceLine.__repr__.   s,    +xx		499diiCCr   )
r   strr   intr   r#   r   T.List[str]returnNone)r   r#   r&   r   r&   r#   )__name__
__module____qualname__r   staticmethodr   r   r"    r   r   r   r   "   s.     t  Dr   r   c                  "    e Zd ZU ded<   ded<   y)CMakeCacheEntryr%   valuer#   typeN)r)   r*   r+   __annotations__r-   r   r   r/   r/   2   s    
Ir   r/   c                  >    e Zd Z	 	 	 d	 	 	 	 	 	 	 	 	 ddZddZddZy)	CMakeTargetNc                |    |i }|| _         || _        || _        || _        || _        g | _        d | _        d | _        y r   )namer1   
propertiesimportedtlinedependscurrent_bin_dircurrent_src_dir)r   r6   target_typer7   r8   r9   s         r   r   zCMakeTarget.__init__7   sI     J		$ 
$&1515r   c                    d}d}| j                   D ]$  }|dj                  || j                   |         z  }& |j                  | j                  | j                  | j                  || j
                        S )NzsCMake TARGET:
  -- name:      {}
  -- type:      {}
  -- imported:  {}
  -- properties: {{
{}     }}
  -- tline: {} z      '{}': {}
)r7   r    r6   r1   r8   r9   )r   r!   propSTRis       r   r"   zCMakeTarget.__repr__J   sl     H 	HA)00DOOA4FGGG	Hxx		499dmmWdjjQQr   c                   | j                   sy | j                   j                         D ]Q  \  }}|D cg c]  }|j                          c}| j                   |<   t        d | j                   |   D              rQJ  y c c}w )Nc              3  $   K   | ]  }d |v 
 yw);Nr-   ).0xs     r   	<genexpr>z/CMakeTarget.strip_properties.<locals>.<genexpr>W   s     Bs!|Bs   )r7   itemsstripall)r   keyvalrF   s       r   strip_propertieszCMakeTarget.strip_propertiesQ   sm    --/ 	CHC7:#;!AGGI#;DOOC BT__S-ABBBB	C#;s   A=)NFN)
r6   r#   r=   r#   r7   z$T.Optional[T.Dict[str, T.List[str]]]r8   boolr9   zT.Optional[CMakeTraceLine]r(   )r&   r'   )r)   r*   r+   r   r"   rM   r-   r   r   r4   r4   6   sQ    
 EI$):>6 6 !6 B	6
 "6 86&RCr   r4   c                        e Zd Zd fdZ xZS )CMakeGeneratorTargetc                `    t         |   |di        g | _        g | _        g | _        d | _        y )NCUSTOM)superr   outputs_outputs_strcommandworking_dir)r   r6   	__class__s     r   r   zCMakeGeneratorTarget.__init__Z   s2    x,%')+,.-1r   )r6   r#   r&   r'   )r)   r*   r+   r   __classcell__)rX   s   @r   rP   rP   Y   s    2 2r   rP   c                     e Zd Zd#d$dZd%dZd&dZd'd(dZd)dZd*dZd+dZ	d,d	Z
d-d
Zd.dZd/dZd/dZd/dZd/dZd'd0dZd/dZd/dZd/dZd/dZd/dZd/dZd/dZd/dZd/dZd/dZd1d2dZd/dZd/dZd/dZd3dZ d3d Z!d4d!Z"d5d"Z#y)6CMakeTraceParserc                   i | _         i | _        i | _        i | _        t	               | _        g | _        || _        || _        || _	        d| _
        || j                  z  | _        t        |d      rdnd| _        g | _        g | _        g | _        i d| j"                  d| j$                  d| j&                  d| j(                  d	| j*                  d
| j,                  d| j.                  d| j0                  d| j2                  d| j4                  d| j6                  d| j8                  d| j:                  d| j<                  d| j>                  d| j@                  d| jB                  d| jD                  i| _#        t        | j                  d      r9tI        jJ                  tM        jN                  d| j                   d      d       y y )Nzcmake_trace.txtz>=3.17json-v1humansetunsetadd_executableadd_libraryadd_custom_commandadd_custom_targetset_propertyset_target_propertiestarget_compile_definitionstarget_compile_optionstarget_include_directoriestarget_link_librariestarget_link_optionsadd_dependenciesmessagemeson_ps_execute_delayed_callsmeson_ps_reload_varsmeson_ps_disabled_functionz<3.17.0z                CMake support for versions <3.17 is deprecated since Meson 0.62.0.
                |
                |   However, Meson was only able to find CMake a  .
                |
                |   Support for all CMake versions below 3.17.0 will be removed once
                |   newer CMake versions are more widely adopted. If you encounter
                |   any errors please try upgrading CMake to a newer version first.
            T)once)(varsvars_by_filetargetscacher_   explicit_headerscustom_targetsenv
permissivecmake_version
trace_filetrace_file_pathr	   trace_formaterrorsdelayed_commandsstored_commands
_cmake_set_cmake_unset_cmake_add_executable_cmake_add_library_cmake_add_custom_command_cmake_add_custom_target_cmake_set_property_cmake_set_target_properties!_cmake_target_compile_definitions_cmake_target_compile_options!_cmake_target_include_directories_cmake_target_link_libraries_cmake_target_link_options_cmake_add_dependencies_cmake_message_meson_ps_execute_delayed_calls_meson_ps_reload_vars_meson_ps_disabled_function	functionsr   deprecationtextwrapdedent)r   rz   	build_dirrx   ry   s        r   r   zCMakeTraceParser.__init__b   s>   CE	DFCEGI
-0U =?$*+(4??:)8)QIW^#%
 .079K
4??K
T&&K
 d88K
 422	K

 !$"@"@K
  !>!>K
 D44K
 $T%F%FK
 )$*P*PK
 %d&H&HK
 )$*P*PK
 $T%F%FK
 "4#B#BK
  < <K
 t**K
( -d.R.R)K
* #D$>$>+K
, )$*J*J-K
2 4--y9X__ 2@ AE@R@R?S T.   :r   c                    ddgddgd}dg}| j                         s|d| j                   gz  }|| j                     |z   S )Nz--tracez--trace-expandz--trace-format=json-v1)r^   r]   z--no-warn-unused-cliz--trace-redirect=)requires_stderrr{   r}   )r   arg_map	base_argss      r   
trace_argszCMakeTraceParser.trace_args   sa    !12(*BC

 ,,	##%-doo->?@@It(()I55r   c                .    t        | j                  d      S )Nz<3.16)r	   rz   )r   s    r   r   z CMakeTraceParser.requires_stderr   s    t117;;r   Nc                     j                         sf j                  j                  s3 j                  j                         st	        d j                  d       j                  j                  dd      }|st	        d      d } j                  dk(  r j                  |      }n: j                  dk(  r j                  |      }nt	        d	 j                   d
      |D ]b  }|j                   j                  v r xj                  |gz  c_        2 j                  j                  |j                  d       }|s[ ||       d  fd} fd} j                  j                         D ci c]  \  }}| ||       c}} _         j                   j                         D 	
ci c]0  \  }	}
|	|
j                         D ci c]  \  }}| ||       c}}2 c}}}
}	 _         j"                  D ch c]   }t%        t'        t)        |                   " c} _         j*                  j                         D ci c],  \  }}|t-         ||j.                        |j0                        . c}} _         j2                  j5                         D ]  } fd}t'        |j6                   |      |_        t'        |j0                   |      |_        |j8                  5|j8                  j                         D ci c]  \  }}| |||       c}}nd |_         ||j:                  |      |_          j<                  D ]  } ||j>                        |_         |jB                  }|jB                  D cg c]
  } ||       c}|_!        tE        |jB                  |      D ]*  \  }}|d   dk(  st	        djG                  |d                |jH                  (t%        t'        t)        |jH                                     nd |_$          j2                  j5                         D ]  }|jK                           y c c}}w c c}}w c c}}}
}	w c c}w c c}}w c c}}w c c}w )NzCMake: Trace file "z" not foundignorezutf-8)r~   encodingz3CMake: The CMake trace was not provided or is emptyr^   r]   z,CMake: Internal error: Invalid trace format z. Expected [human, json-v1]c                `    | r*t        dj                  |             j                  d      S g S NrD   r   joinsplit)strlistr   s    r   <lambda>z(CMakeTraceParser.parse.<locals>.<lambda>   sQ      SZOjknkskst{k|  C  PD  PJ  PJ  KN  PO   `b r   c                    | rAt        dj                  |             j                  d      D cg c]  }t        |       c}S g S c c}w r   )r   r   r   r   )r   rF   r   s     r   r   z(CMakeTraceParser.parse.<locals>.<lambda>   s      gnb}  B  G  G  HO  P  RV  cW  c]  c]  ^a  cb  Qc]^QUVWQX  Qc   tv   Qcs   Ac                d    | r,t        dj                  |       |      j                  d      S g S )NrD   context_tgtr   )r   tr   s     r   r   z(CMakeTraceParser.parse.<locals>.<lambda>   sl      u|b}  B  G  G  HO  P  RV  de  cf  cl  cl  mp  cq   BD r   r   r   r?   zdWe evaluated the cmake variable '{}' to an empty string, which is not a valid path to an executable.)&r   r|   existsis_filer   	read_textr}   _lex_trace_human_lex_trace_jsonr   r   r   r   getrr   rH   rs   rv   r   r   r#   ru   r/   r0   r1   rt   valuesr6   r7   r:   rw   rU   rT   rV   zipr    rW   rM   )r   tracelexer1lfnstrlist_genpathlist_genkvpdrF   tgttgtlist_genctgttemprV   srcs   `                 r   parsezCMakeTraceParser.parse   s'   ##%''..t7K7K7S7S7U$':4;O;O:RR]%^__((22(W2UE !VWW '**51F)+))%0F #OPTPaPaObb}!~  		Avv...$$+$ ##AFFD1B1		 @b Av3799??3DE41aQA&E	 ))//1
 
1 aggi8da;q>!88
 [_ZoZo pUV&A#a&$&O!P p 

((*

 1	 AGG$ 

 <<&&( 	8C PDK2388TsSCH2388TsSCH + 47>>3G3G3I+/1a;q#&&15 N &ckk37CK	8 '' 		HD'(9(9:DL<<D48LLAqKNADL #DLL$ 7 1:#(~  F  F  GJ  KL  GM  N 
 bfaqaqa}t$?DDTDT@UW[$\]  DHD		H <<&&( 	#C  "	#G F8
 !q
 Bs6   0Q+Q
QQ
9%Q1QQ!;Q'Q
c                R    |D ]!  }|| j                   v s| j                   |   c S  g S r   rr   )r   var_listrA   s      r   get_first_cmake_var_ofz'CMakeTraceParser.get_first_cmake_var_of   s1     	$ADII~yy|#	$ 	r   c                @    || j                   v r| j                   |   S g S r   r   r   vars     r   get_cmake_varzCMakeTraceParser.get_cmake_var   s!    $))99S>!	r   c                b    || j                   v r!| j                   |   r| j                   |   d   S y )Nr   r   r   s     r   
var_to_strzCMakeTraceParser.var_to_str  s.    $))		#99S>!$$r   c                    |syt        |t              r|d   }n|}|j                         }|dvxr |j                  d       S )NFr   )0OFFNOFALSENIGNORENOTFOUND)
isinstancelistupperendswith)r   exprexpr_strs      r   _str_to_boolzCMakeTraceParser._str_to_bool  sM    dD!AwHH>>#IIoRZRcRcdnRoNoor   c                X    | j                  | j                  j                  |g             S r   )r   rr   r   r   s     r   var_to_boolzCMakeTraceParser.var_to_bool  s"      sB!788r   c                    | j                   rt        j                  d| d| d|        y t        d| d| d|       )NzCMake trace warning: z() 
zCMake: )ry   r   debugr   )r   functionerrorr9   s       r   _gen_exceptionzCMakeTraceParser._gen_exception  sL     ??JJ.xjE7"UGLMwxjE7"UGDEEr   c                   d}d|j                   v }	 |j                   j                  d      }|j                   |dz      }g }|j                   D ]"  }|r|dk(  r|dk(  r n|j	                  |       $ t        |      dk  r| j                  dd|      S |j                  d      }d	j                  |      }|r8|| j                  vs|r(t        |j                  d
      |      | j                  |<   |s|| j                  v r| j                  |= yy|j                  d
      | j                  |<   |j                  d
      | j                  j                  |j                  i       |<   y# t        t        f$ r Y 8w xY w)a[  Handler for the CMake set() function in all varieties.

        comes in three flavors:
        set(<var> <value> [PARENT_SCOPE])
        set(<var> <value> CACHE <type> <docstring> [FORCE])
        set(ENV{<var>} <value>)

        We don't support the ENV variant, and any uses of it will be ignored
        silently. the other two variates are supported, with some caveats:
        - we don't properly handle scoping, so calls to set() inside a
          function without PARENT_SCOPE set could incorrectly shadow the
          outer scope.
        - We don't honor the type of CACHE arguments
        NFORCECACHEr   PARENT_SCOPEr_   requires at least one argumentr    rD   )r   index
ValueError
IndexErrorappendlenr   popr   ru   r/   r   rr   rs   
setdefaultr   )	r   r9   
cache_typecache_force	cache_idxr   rA   
identifierr0   s	            r   r   zCMakeTraceParser._cmake_set"  so   " 
+	

((1IIM2J
  	A^+ G|KKN	 t9q=&&u.NPUVV XXa[
 +{)8S9I:)V

:&TYY&IIj) ' %*KK$4DIIj!GL{{SVGWD((R8DK J' 		s   -E% %E87E8c                    t        |j                        dk  r| j                  dd|      S |j                  d   | j                  v r| j                  |j                  d   = y y )Nr   r`   r   r   )r   r   r   rr   r   r9   s     r   r   zCMakeTraceParser._cmake_unset_  sV    uzz?Q&&w0PRWXX::a=DII%		%**Q-( &r   c                
   t        |j                        }d}d|vr| j                  dd|      S |j                  d       t	        |      dk  r| j                  dd|      S t        |d   di ||	      | j                  |d   <   y )
NTIMPORTEDra   z*non imported executables are not supportedr   requires at least 1 argumentr   
EXECUTABLEr9   r8   )r   r   r   remover   r4   rt   )r   r9   r   is_importeds       r   r   z&CMakeTraceParser._cmake_add_executableg  s    EJJ T!&&'79eglmmJt9q=&&'79WY^__ +DG\2U]h iT!Wr   c                   t        |j                        }d|v rX|j                  d       t        |      dk  r| j	                  dd|      S t        |d   di |d|v       | j                  |d   <   y d|v rY|j                  d       t        |      dk  r| j	                  dd	|      S t        |d   |d   i |d
      | j                  |d   <   y d|v r[|j                  d       t        |      dk  r| j	                  dd	|      S t        |d   dd|d   gi|      | j                  |d   <   y d|v r| j	                  dd|      S t        |d   di |      | j                  |d   <   y )N	INTERFACEr   rb   z$interface library name not specifiedr   r   r   r   zrequires at least 2 argumentsTALIASINTERFACE_LINK_LIBRARIES)r9   OBJECTz"OBJECT libraries are not supportedNORMAL)r   r   r   r   r   r4   rt   r   r9   r   s      r   r   z#CMakeTraceParser._cmake_add_libraryw  s~   EJJ $KK$4y1}**=:`bghh$/QbPU`jnr`r$sDLLa!4KK
# 4y1}**=:Y[`aa$/Qa"E\`$aDLLa!_KK  4y1}**=:Y[`aa %0QC]`def`g_hBiqv$wDLLa!&&}6Z\abb$/Q2U$SDLLa!r   c                   | j                  t        |j                              }|s| j                  dd|      S |d   dk(  r| j                  dd|      S g d}t	        |      }dd}dd}dd	}d dfd
}	d }
|D ]K  }||v r9|dk(  r|}
n0|dk(  r|}
n(|dk(  r|	}
n |dk(  r|}
|xj
                  g gz  c_        nd }
@|
C |
||       M | j                  d      }| j                  d      }rt              nd |_        |rt        |      nd |_	        |rt        |      nd |_
        | j                  |j                        |_        | j                  |j                        |_        |j
                  D cg c]  }| j                  |       c}|_        | xj                  |gz  c_        |r|| j                  |<   y y c c}w )Nrc   r   r   TARGETz(TARGET syntax is currently not supported)OUTPUTCOMMANDMAIN_DEPENDENCYDEPENDS
BYPRODUCTSIMPLICIT_DEPENDSWORKING_DIRECTORYCOMMENTDEPFILEJOB_POOLVERBATIMAPPENDUSES_TERMINALCOMMAND_EXPAND_LISTSc                0    |xj                   | gz  c_         y r   )rU   rK   targets     r   handle_outputzACMakeTraceParser._cmake_add_custom_command.<locals>.handle_output  s    C5(r   c                @    | dk(  ry |j                   dxx   | gz  cc<   y )NARGS)rV   r  s     r   handle_commandzBCMakeTraceParser._cmake_add_custom_command.<locals>.handle_command  s"    f}NN23%'r   c                0    |xj                   | gz  c_         y r   )r:   r  s     r   handle_dependszBCMakeTraceParser._cmake_add_custom_command.<locals>.handle_depends  s    NNse#Nr   c                $    | y dz  | z  y )Nr   r-   )rK   r  rW   s     r   handle_working_dirzFCMakeTraceParser._cmake_add_custom_command.<locals>.handle_working_dir  s"    "!s"s"r   r	  r  r  r
  !MESON_PS_CMAKE_CURRENT_BINARY_DIR!MESON_PS_CMAKE_CURRENT_SOURCE_DIR)rK   r#   r  rP   r&   r'   )_flatten_argsr   r   r   rP   rV   r   r   rW   r;   r<   _guess_filesrU   r:   rw   rt   )r   r9   r6   r   
magic_keysr  r  r  r   r"  r   rA   cbinary_dircsource_dirrF   rW   s                  @r   r   z*CMakeTraceParser._cmake_add_custom_command  s   !!$uzz"23&&';=[]bcc 7h&&';=ginooa
 &d+	)	(
	$ 	#  	AJ=&B)^'B--+B)^'BNNrd*NB~1f!	$ oo&IJoo&IJ2=T+.46Ak!2t6Ak!2t"//0C0CD**6>>:8>G1$++A.Gx'!'DLL  Hs   7G c                    t        |j                        dk  r| j                  dd|      S | j                  ||j                  d          y )Nr   rd   r   r   )r   r   r   r   r   s     r   r   z)CMakeTraceParser._cmake_add_custom_target  sF     uzz?Q&&':<\^cdd 	&&uejjm<r   c                    t        j                        }|j                  d      }dg }|r5|j                  d      }|dv rd|dk(  rn||j                  d      z  }|r5|s j	                  dd      S t        |      d	k(  ry |j                  d       j                  d
k(  r!dj                  |      j                  d      n(|D cg c]  }|j                  d      D ]  }|  c}}sy d fd}d fd}	|dk(  r|D ]
  }
 ||
        y |dk(  r! j                  |      }|D ]
  }
 |	|
        y y c c}}w )Nr   F>   r  APPEND_STRINGTPROPERTYrD   re   zfailed to parse argument listr   r^   r   c                    | j                   vrj                  dd|  d      S j                   |    }|j                  vrg |j                  <   r|j                  xx   z  cc<   y |j                  <   y )Nre   TARGET 
 not found)rt   r   r7   )r   r   r   r   r   r9   r0   s     r   	do_targetz7CMakeTraceParser._cmake_set_property.<locals>.do_target  sz    $**>WQCz;RTYZZ,,q/C/-/z*z*e3*-2z*r   c                :   dk7  sj                        sy j                  d      }|s*t        j                  t	        j
                  d             d}t        |      }t        |       }|j                         s||z  }j                  j                  |       y )NHEADER_FILE_ONLYr$  z                    CMake trace: set_property(SOURCE) called before the preload script was loaded.
                    Unable to determine CMAKE_CURRENT_SOURCE_DIR. This can lead to build errors.
                .)
r   r   r   warningr   r   r   is_absoluterv   add)r   r<   cur_psrc_pr   r   r0   s       r   	do_sourcez7CMakeTraceParser._cmake_set_property.<locals>.do_source  s    //t7H7H7O"oo.QRO"X__ .   #&)EIE$$&!!%%e,r   r  SOURCE)r   r#   r&   r'   )r   r#   r&   r'   )	r   r   r   r   r   r   r}   r   r&  )r   r9   r   scopert   currrF   yr1  r:  rA   filesr   r   r0   s   ``          @@@r   r   z$CMakeTraceParser._cmake_set_property  s\   EJJ88A;D 22z!tzz#&G  &&~7VX]^^t9>XXa[
'HHTN((-E $;1aggcl;Q;Q;E	3 	3	-& H !h%%g.E ! O <s   Ec                V   t        |j                        }g }|r+|j                  d      }|dk(  rn|j                  |       |r+g }| j                  dk(  r|j                  d      }g }t        j                  d      }|D ]\  }	|j                  |	      r8|r1|j                  |dj                  |      j                  d      f       |	}g }L|j                  |	       ^ |rn|j                  |dj                  |      j                  d      f       n<t        |d d d   |dd d         D 
cg c]  }
|
d   |
d   j                  d      f }}
|D ]Q  \  }}|D ]G  }|| j                  vr| j                  d	d
| d|      c c S || j                  |   j                  |<   I S y c c}
w )Nr   
PROPERTIESr^   z	^[A-Z_]+$r   rD   r   r   rf   r/  r0  )r   r   r   r   r}   recompilematchr   r   r   rt   r   r7   )r   r9   r   rt   r=  arglistr6   r   
prop_regexarF   r0   rA   s                r   r   z-CMakeTraceParser._cmake_set_target_properties6  s   EJJ88A;D|#NN4  . 68'88A;D"$FL1J %##A&chhv.>.D.DS.I'JKDFMM!$% chhv&6&<&<S&ABC8;D1ItADqDz8RS1!adjjo.SGS" 	9KD% 9DLL(../F'RSQTT^H_afgg38Q**40	9	9 Ts   - F&c                2   t        |j                        }t        |      dk  r| j                  dd|      S | j                  j                  |d         }|s| j                  dd|      S |dd  D ]&  }|xj                  |j                  d      z  c_        ( y )Nr   rl   ztakes at least 2 argumentsr   ztarget not foundr   rD   )r   r   r   r   rt   r   r:   r   )r   r9   r   r  rA   s        r   r   z(CMakeTraceParser._cmake_add_dependenciesk  s    EJJt9q=&&'9;WY^__!!$q'*&&'9;MuUUab 	+ANNaggcl*N	+r   c                ,    | j                  ddd|       y )Nrg   COMPILE_DEFINITIONSINTERFACE_COMPILE_DEFINITIONS_parse_common_target_optionsr   s     r   r   z2CMakeTraceParser._cmake_target_compile_definitionsy  s!    ))*FH]_~  AF  	Gr   c                ,    | j                  ddd|       y )Nrh   COMPILE_OPTIONSINTERFACE_COMPILE_OPTIONSrL  r   s     r   r   z.CMakeTraceParser._cmake_target_compile_options}  s    ))*BDUWrtyzr   c                6    | j                  ddd|ddgd       y )Nri   INCLUDE_DIRECTORIESINTERFACE_INCLUDE_DIRECTORIESSYSTEMBEFORET)r   pathsrL  r   s     r   r   z2CMakeTraceParser._cmake_target_include_directories  s@    ))*FH]_~  AF  PX  Zb  Oc  ko)  	pr   c                ,    | j                  ddd|       y )Nrk   LINK_OPTIONSINTERFACE_LINK_OPTIONSrL  r   s     r   r   z+CMakeTraceParser._cmake_target_link_options  s    ))*?Qikpqr   c                ,    | j                  ddd|       y )Nrk   LINK_LIBRARIESr  rL  r   s     r   r   z-CMakeTraceParser._cmake_target_link_libraries  s    ))*?AQSmotur   c                   t        |j                        }t        |      dk  r| j                  dd|      S |d   j	                         j                         dvry | xj                  dj                  |dd        gz  c_        y )Nr   rm   ztakes at least 1 argumentr   )FATAL_ERROR
SEND_ERRORr   )r   r   r   r   r   rI   r~   r   r  s      r   r   zCMakeTraceParser._cmake_message  sp    EJJt9q=&&y2MuUU7==?  "*GGab*++r   c                   |dg}t        |j                        }t        |      dk  r| j                  |d|      S |d   }|| j                  vr| j                  |d| d|      S g }	g }
d}|dd  D ]?  }||v r|dv r|}|d	v r|	|j                  d
      z  }	|dv s,|
|j                  d
      z  }
A |r"| j                  |	      }	| j                  |
      }
|	D cg c]  }|s|	 }	}|
D cg c]  }|s|	 }
}||
f||	ffD ]i  }|d   | j                  |   j                  vrg | j                  |   j                  |d   <   | j                  |   j                  |d   xx   |d   z  cc<   k y c c}w c c}w )NrU  r   r   r   r/  r0  PUBLIC>   r`  PRIVATEr  LINK_PUBLICLINK_PRIVATELINK_INTERFACE_LIBRARIES>   r`  r  rb  rd  rD   >   r`  ra  rc  )r   r   r   r   rt   r   r&  r7   )r   r   private_propinterface_propr9   r   rV  r   r  	interfaceprivatemoderA   rF   js                  r   rM  z-CMakeTraceParser._parse_common_target_options  s   >ZFEJJt9q=&&t-MuUUa%&&twvhj-I5QQ	ab 	(AF{qqYYQWWS\)	<<1773<'	( )))4I''0G )/1QQ/	/%+1++)NI+FG 	:AQ44<</:::8:V$//!5LL ++AaD1QqT91		: 0+s   E0#E0-E55E5c                    | j                   D ]3  }| j                  j                  |j                  d       }|s, ||       5 g | _         y r   )r   r   r   r   )r   r9   r   r   s       r   r   z0CMakeTraceParser._meson_ps_execute_delayed_calls  sE    %% 	A##AFFD1B1	  "r   c                0    | j                  d      | _        y )NMESON_PS_DELAYED_CALLS)r   r   r   s     r   r   z&CMakeTraceParser._meson_ps_reload_vars  s     $ 2 23K Lr   c                    t        |j                        }|st        j                  d       y t        j                  d|d    d       y )Nz_Invalid preload.cmake script! At least one argument to `meson_ps_disabled_function` is expectedzThe CMake function "r   z8" was disabled to avoid compatibility issues with Meson.)r   r   r   r   r5  r  s      r   r   z,CMakeTraceParser._meson_ps_disabled_function  s>    EJJJJxy+DG94lmnr   c              #    K   t        j                  dt         j                        }t        j                  d      }d}|t        |      k  r|j	                  ||      }|s>|j	                  ||      }|st        ||d         t        d      |j                         }`|j                         }|j                  d      }|j                  d      }|j                  d      }	|j                  d      }
|
j                  d	      }|D cg c]  }|j                          }}t        |t        |      |	|       |t        |      k  ry y c c}w w)
Nz>\s*(.*\.(cmake|txt))\(([0-9]+)\):\s*(\w+)\(([\s\S]*?) ?\)\s*\nz[^\n]*\nr   zFailed to parse CMake tracer            r   )rB  rC  	MULTILINEr   rD  printr   endgroupr   rI   r   r$   )r   r   	reg_tline	reg_otherlocmo_file_line
skip_matchr   r   r   r   arglrG  s                r   r   z!CMakeTraceParser._lex_trace_human  s(    JJ`bdbnbno	JJ{+	CJ$??5#6L&__UC8
!%+&()FGG nn&""$C%%a(D%%a(D%%a(D%%a(D::c?D'+,!AGGI,D, s4y$==) CJ$ -s   DEE
)EEc              #    K   |j                  d      }|j                  d       |D ]  }t        j                  |      }t	        |d   t
              sJ t	        |d   t              sJ t	        |d   t
              sJ t	        |d   t              sJ |d   }|D ]  }t	        |t
              rJ  t        |d   |d   |d   |        y w)NF)keependsr   r   r   cmdr   )	
splitlinesr   jsonloadsr   r#   r$   r   r   )r   r   linesrA   datar   rj  s          r   r   z CMakeTraceParser._lex_trace_json  s       % 0		! 		PA::a=Dd6lC000d6lC000d5kC000d6lD111<D *!!S)))* ftF|T%[$OO		Ps   B,C/Cc                @    g }|D ]  }||j                  d      z  } |S r   )r   )r   r   resrA   s       r   r%  zCMakeTraceParser._flatten_args  s-     	 A1773<C	 
r   c                   | j                   dk7  r|S t        j                  d      }t        j                  d      }g }d }d}|D ]  }||}d}
t        |      j	                         r||gz  }|}d}.|j                  |      s||gz  }|}d}J|j                  |      r| d| }||gz  }d }d}mt        | d|       j                         r
| d| }d}|r||gz  }|}d}| d| }d} |r||gz  }|S )Nr^   z^([A-Za-z]:)?/(.*/)*[^./]+$z^.*\.[a-zA-Z]+$Fr   T)r}   rB  rC  r   r   rD  r   )r   broken_list	reg_startreg_end
fixed_listcurr_str
path_foundrA   s           r   r&  zCMakeTraceParser._guess_files  sU   ' JJ=>	**/0"$
$(
 	#A"
h'')xj(
"
__X.xj(
"
q!&Zq,xj(
"

!A3'(//1&Zq,!
xj(
"
&Zq,"
?	#B 8*$Jr   )T)
rz   r#   r   r   rx   z'Environment'ry   rN   r&   r'   )r&   r%   )r&   rN   r   )r   T.Optional[str]r&   r'   )r   r%   r&   r%   )r   r#   r&   r%   )r   r#   r&   r  )r   zT.Union[str, T.List[str]]r&   rN   )r   r#   r&   rN   )r   r#   r   r#   r9   r   r&   r'   )r9   r   r&   r'   )r9   r   r6   r  r&   r'   )NF)r   r#   re  r#   rf  r#   r9   r   r   zT.Optional[T.List[str]]rV  rN   r&   r'   )r   r#   r&   z'T.Generator[CMakeTraceLine, None, None])r   r%   r&   r%   )r  r%   r&   r%   )$r)   r*   r+   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rM  r   r   r   r   r   r%  r&  r-   r   r   r[   r[   a   s    =~
6<F#Pp9F;Xz)j  TDF(P=JX39j+G{prv
,*:X"Mo>6P1r   r[   )
__future__r   commonr   	generatorr   r?   r   mesonlibr	   typingTpathlibr   	functoolsr   rB  r  r   TYPE_CHECKINGenvironmentr   r   
NamedTupler/   r4   rP   r[   r-   r   r   <module>r     ss   " # " 2  &    	  ??)D D all !C !CF2; 2X Xr   