o
    nc                     @  sb   d dl mZ ddlmZ ddlmZ ddlmZ d dlZej	r'ddl
mZmZ dd	dddZdS )    )annotations   )mesonlib)mlog   )cmake_is_debugN)CMakeTraceParserCMakeTarget)context_tgtrawstrtrace'CMakeTraceParser'r
   T.Optional['CMakeTarget']returnc             
     s  dvrS d}dd>dd}d?d
dd> fdd}d>fdd}i ddd ddd ddd ddd ddd ddd ddd d|d |d!fd"dd#fd$dd%fd&dd'fd(dd)fd*dd+d,d d-d.d d/d0d d1d d2d d3d d4d fd5dfd6d||d7d@fd8d9t k r׈t d: k rǈ d;krǈd:  d<kr| 7 }n| 7 }d:7 t k s|S )AzParse CMake generator expressions

    Most generator expressions are simply ignored for
    simplicety, however some are required for some common
    use cases.
    z$< r   argr   r   c                 S  s:   |  d}|dk rdS | d | | |d d  krdS dS )N,r   0r   1)find)r   col_pos r   yhome/ych/rk3568/buildroot/output/rockchip_rk3568_recovery/host/lib/python3.10/site-packages/mesonbuild/cmake/generator.pyequal,   s   
$z*parse_generator_expressions.<locals>.equalopc              	   S  sF   | d}|dk rdS t|d | d| ||d d  r!dS dS )Nr   r   r   z{}{}r   r   )r   r   Zversion_compareformat)r   r   r   r   r   r   	vers_comp3   s   
0z.parse_generator_expressions.<locals>.vers_compc                   sj   d| vr d u r
dS d  j| g S | d}|d jv r.j|d  j|d g ng }d |S )Nr   r   ;r   r   )join
propertiesgetsplittargets)r   argsprops)r
   r   r   r   target_property:   s   
.
z4parse_generator_expressions.<locals>.target_propertyc                   s6  |  j vrtd|  d dS  j |  }g }d}d|jv r,dd |jd D }|d }t jr?d|v r8d}nd	|v r>d	}nd	|v rEd	}d
| |jv r]ddd |jd
|  D S d|jv roddd |jd D S d| |jv rddd |jd|  D S d|jv rddd |jd D S dS )Nz5Unable to evaluate the cmake variable '$<TARGET_FILE:z>'.r   ZIMPORTED_CONFIGURATIONSc                 S     g | ]}|r|qS r   r   .0xr   r   r   
<listcomp>O       zDparse_generator_expressions.<locals>.target_file.<locals>.<listcomp>r   DEBUGZRELEASEZIMPORTED_IMPLIB_r   c                 S  r'   r   r   r(   r   r   r   r+   \   r,   ZIMPORTED_IMPLIBc                 S  r'   r   r   r(   r   r   r   r+   ^   r,   ZIMPORTED_LOCATION_c                 S  r'   r   r   r(   r   r   r   r+   `   r,   ZIMPORTED_LOCATIONc                 S  r'   r   r   r(   r   r   r   r+   b   r,   )r#   r   warningr    r   envr   )r   ZtgtZcfgscfgr   r   r   target_fileE   s4   



 
 
z0parse_generator_expressions.<locals>.target_fileZBOOLc                 S  s   |   dv s| drdS dS )N>   NZIGNOREr   ZFALSEZNOTFOUNDZNOZOFFz	-NOTFOUNDr   r   )upperendswithr*   r   r   r   <lambda>g   s    z-parse_generator_expressions.<locals>.<lambda>ANDc                 S      t dd | dD rdS dS )Nc                 s      | ]}|d kV  qdS r   Nr   r)   yr   r   r   	<genexpr>h       @parse_generator_expressions.<locals>.<lambda>.<locals>.<genexpr>r   r   r   )allr"   r6   r   r   r   r7   h        ORc                 S  r9   )Nc                 s  r:   r;   r   r<   r   r   r   r>   i   r?   r@   r   r   r   )anyr"   r6   r   r   r   r7   i   rB   NOTc                 S  s   | dkrdS dS Nr   r   r   r6   r   r   r   r7   j   s    ZIFc                 S  s.   |  dd dkr|  dd S |  dd S )Nr   r   r   r   r   )r"   r6   r   r   r   r7   l   s   . r   c                 S     dS Nr   r   r6   r   r   r   r7   n       r   c                 S     | S Nr   r6   r   r   r   r7   o   rI   ZSTREQUALEQUALZVERSION_LESSc                   
    d| S )N<r   r6   r   r   r   r7   t      
 ZVERSION_GREATERc                   rM   N>r   r6   rO   r   r   r7   u   rP   ZVERSION_EQUALc                   rM   )N=r   r6   rO   r   r   r7   v   rP   ZVERSION_LESS_EQUALc                   rM   )Nz<=r   r6   rO   r   r   r7   w   rP   ZVERSION_GREATER_EQUALc                   rM   )Nz>=r   r6   rO   r   r   r7   x   rP   Z
LOWER_CASEc                 S     |   S rK   )lowerr6   r   r   r   r7   {       Z
UPPER_CASEc                 S  rT   rK   )r4   r6   r   r   r   r7   |   rV   ZINSTALL_INTERFACEc                 S  rG   rH   r   r6   r   r   r   r7      rI   c                 S  rJ   rK   r   r6   r   r   r   r7      rI   c                 S  rG   rQ   r   r6   r   r   r   r7      rI   c                 S  rG   )Nr   r   r6   r   r   r   r7      rI   c                 S  rG   )Nr   r   r6   r   r   r   r7      rI   c                   s   |  j v rdS dS rF   r#   r6   r1   r   r   r7          c                   s   |  j v r| S dS rH   rW   r6   r1   r   r   r7      rX   )ZBUILD_INTERFACEzANGLE-RCOMMA	SEMICOLONZTARGET_EXISTSZTARGET_NAME_IF_EXISTSZTARGET_PROPERTYZTARGET_FILEc                    s   d7 d} d}d}d}t k rE dkrn,t d k r5 dkr5d  dkr5|  7 }n| 7 }d7 t k s|d}|dk rQ|} n|d | } ||d d  }|  } | }| v rq|  |}|S )	Nr   r   rR   r   $rN   :r   )lenr   strip)funcr$   resexpr   )eval_generator_expressionsir   	supportedr   r   rb      s.   ,
z?parse_generator_expressions.<locals>.eval_generator_expressionsr   r[   rN   N)r   r   r   r   )r   r   r   r   r   r   )r   r   )r]   )r   r   r
   outr   r&   r2   r   )r
   rb   rc   r   rd   r   r   r   parse_generator_expressions   sx   

 	


-(,
rf   )r   r   r   r   r
   r   r   r   )
__future__r   r   r   r   commonr   typingTTYPE_CHECKINGZtraceparserr   r	   rf   r   r   r   r   <module>   s   