o
    uJAf                     @  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   ?/usr/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   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-   IMPORTED_LOCATIONc                 S  r(   r   r   r)   r   r   r   r,   b   r-   )r$   r   warningr!   r   envr    )r   tgtZcfgscfgr   r   r   target_fileE   s4   



 
 
z0parse_generator_expressions.<locals>.target_fileBOOLc                 S  s   |   dv s| drdS dS )N>   r   NOTFOUNDOFFIGNORENOr   NFALSEz	-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#   r?   r   r   r   r@   h        ORc                 S  rB   )Nc                 s  rC   rD   r   rE   r   r   r   rG   i   rH   rI   r   r   r   )anyr#   r?   r   r   r   r@   i   rK   NOTc                 S  s   | dkrdS dS Nr   r   r   r?   r   r   r   r@   j   s    ZIFc                 S  s.   |  dd dkr|  dd S |  dd S )Nr   r   r   r   r   )r#   r?   r   r   r   r@   l   s   . r   c                 S     dS Nr   r   r?   r   r   r   r@   n       r   c                 S     | S Nr   r?   r   r   r   r@   o   rR   ZSTREQUALEQUALZVERSION_LESSc                   
    d| S )N<r   r?   r   r   r   r@   t      
 ZVERSION_GREATERc                   rV   N>r   r?   rX   r   r   r@   u   rY   ZVERSION_EQUALc                   rV   )N=r   r?   rX   r   r   r@   v   rY   ZVERSION_LESS_EQUALc                   rV   )Nz<=r   r?   rX   r   r   r@   w   rY   ZVERSION_GREATER_EQUALc                   rV   )Nz>=r   r?   rX   r   r   r@   x   rY   Z
LOWER_CASEc                 S     |   S rT   )lowerr?   r   r   r   r@   {       Z
UPPER_CASEc                 S  r]   rT   )r=   r?   r   r   r   r@   |   r_   ZINSTALL_INTERFACEc                 S  rP   rQ   r   r?   r   r   r   r@      rR   c                 S  rS   rT   r   r?   r   r   r   r@      rR   c                 S  rP   rZ   r   r?   r   r   r   r@      rR   c                 S  rP   )Nr   r   r?   r   r   r   r@      rR   c                 S  rP   )Nr   r   r?   r   r   r   r@      rR   c                   s   |  j v rdS dS rO   r$   r?   r4   r   r   r@          c                   s   |  j v r| S dS rQ   r`   r?   r4   r   r   r@      ra   )ZBUILD_INTERFACEzANGLE-RCOMMAZ	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   r[   r   $rW   :r   )lenr   strip)funcr%   resexpr   )eval_generator_expressionsir   	supportedr   r   rj      s.   ,
z?parse_generator_expressions.<locals>.eval_generator_expressionsr   rc   rW   N)r   r   r   r   )r   r   r   r   r   r   )r   r   )re   )r   r   r
   outr   r'   r5   r   )r
   rj   rk   r   rl   r   r   r   parse_generator_expressions   sx   

 	


-(,
rn   )r   r   r   r   r
   r   r   r   )
__future__r   r   r   r   commonr   typingTTYPE_CHECKINGtraceparserr   r	   rn   r   r   r   r   <module>   s   