
    -Phv!              
         d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZ	e	j
        rd dlmZmZmZ ddlmZ  edeee         ee         ee         eed                  d          Z ed	eee         ee         ee         ee         d
          Z edee         ee	j        e                  ee	j        e                  ee	j        e                  d          Z G d de          Z ej        d          Z ej        d          ZdZdZdZdZ ej        eej                  Z  ej        eej                  Z! ej        eej                  Z" G d d          Z#ddZ$dS )    )annotationsN)Literal	TypedDictNotRequired   )TargetDependencyScannerInfoRequire)zby-namezinclude-anglezinclude-quote)logical-namecompiled-module-pathsource-pathunique-on-source-pathzlookup-methodProvide)r
   r   r   r   zis-interfaceRule)primary-outputoutputsprovidesrequiresc                  .    e Zd ZU ded<   ded<   ded<   dS )DescriptionintversionrevisionzT.List[Rule]rulesN)__name__
__module____qualname____annotations__     Z/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mesonbuild/scripts/depscan.pyr   r   3   s0         r   r   z\w*import ([a-zA-Z0-9]+);z \w*export module ([a-zA-Z0-9]+);z"^\s*include\s*['\"](\w+\.\w+)['\"]z#^\s*\bmodule\b\s+(\w+)\s*(?:!+.*)*$z*^\s*\bsubmodule\b\s*\((\w+:?\w+)\)\s*(\w+)z0^\s*use,?\s*(?:non_intrinsic)?\s*(?:::)?\s*(\w+)c                  >    e Zd ZddZdd
ZddZddZddZddZdS )DependencyScannerpickle_filestroutfilec                   t          |d          5 }t          j        |          | _        d d d            n# 1 swxY w Y   || _        | j        j        | _        i | _        i | _        t          j	        t                    | _        g | _        d S )Nrb)openpickleloadtarget_datar%   sourcesprovided_byexportscollectionsdefaultdictlistimportssources_with_exports)selfr#   r%   pfs       r    __init__zDependencyScanner.__init__G   s    +t$$ 	L<BKOOD	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L'/-/)+BMBYZ^B_B_13!!!s   7;;fnamelangLiteral['cpp', 'fortran']returnNonec                j    |dk    r|                      |           d S |                     |           d S )Nfortran)scan_fortran_filescan_cpp_file)r4   r7   r8   s      r    	scan_filezDependencyScanner.scan_fileQ   sA    9""5)))))u%%%%%r   c                z   t          j        |          }t                      }|                    dd                              d          D ]}t
                              |          }t                              |          }t                              |          }|rK|	                    d          
                                }||vr | j        |                             |           |r|	                    d          
                                }	|	|vsJ |                    |	           |	| j        v rt          d|	 d          | j                            |           || j        |	<   |	| j        |<   |r|	                    d          
                                }
|
                    d          d	         }|	                    d
          
                                }| d| }| j                            |           || j        |<   || j        |<   | j        |                             |
           d S )Nutf-8ignoreencodingerrors
   Multiple files provide module .:r   r   )pathlibPathset	read_textsplitFORTRAN_USE_REmatchFORTRAN_MODULE_REFORTRAN_SUBMOD_REgrouplowerr2   appendaddr-   RuntimeErrorr3   r.   )r4   r7   fpathmodules_in_this_filelineimport_matchexport_matchsubmodule_export_matchneededexported_moduleparent_module_name_fullparent_module_namesubmodule_nameconcat_names                 r    r>   z#DependencyScanner.scan_fortran_fileW   sL   U##"uuOOWXOFFLLTRR (	D (	DD)//55L,22488L%6%<%<T%B%B" 7%++A..4466 !555L'..v666 6"."4"4Q"7"7"="="?"?&.BBBBB$((999"d&666&'Z'Z'Z'Z[[[)0077749 1&5U#% D +A*F*Fq*I*I*O*O*Q*Q'%<%B%B3%G%G%J"!7!=!=a!@!@!F!F!H!H!3FFnFF)0077705 -&1U# U#**+BCCCQ(	D (	Dr   c                    t          j        |          }|                    dd                              d          D ]}t                              |          }t                              |          }|r5|                    d          }| j        |         	                    |           |r_|                    d          }|| j
        v rt          d| d          | j        	                    |           || j
        |<   || j        |<   d S )NrB   rC   rD   rG   rH   rI   rJ   )rL   rM   rO   rP   CPP_IMPORT_RErR   CPP_EXPORT_RErU   r2   rW   r-   rY   r3   r.   )r4   r7   rZ   r\   r]   r^   r`   ra   s           r    r?   zDependencyScanner.scan_cpp_file   s   U##OOWXOFFLLTRR 	6 	6D(..t44L(..t44L 3%++A..U#**6222 6"."4"4Q"7"7"d&666&'Z'Z'Z'Z[[[)0077749 1&5U#	6 	6r   srcc                   |dk    r[| j         |         }|                    dd          }d|v rd}nd}t          j                            | j        j        | d|           S d                    | j         |                   S )Nr=   rK   @smodmodrJ   z{}.ifc)r.   replaceospathjoinr+   private_dirformat)r4   ri   r8   exportednamebase	extensions         r    module_name_forz!DependencyScanner.module_name_for   s    9|C(H  ''S11Hh"		!	7<< 0 <>W>WI>W>WXXXt|C0111r   r   c           	     Z   | j         D ]\  }}|                     ||           ddg d}| j         D ]4\  }}| j        j        |         g g d}|| j        v r|                     ||          g|d<   || j        v r| j        |         D ]z}| j                            |          }||k    r#|d         	                    d|i           |r8|d         d         
                    ||                     ||          d	           {|| j        v r@| j        |         }|d
         	                    |||                     ||          d           |d         	                    |           6t          | j        dd          5 }t          j        ||           d d d            n# 1 swxY w Y   dS )NrH   r   )r   r   r   )r   r   r   r   r   r
   )r   r   r   )r
   r   r   r   wrB   )rE   )r,   r@   r+   source2objectr3   rw   r2   r-   getrW   updater.   r(   r%   jsondump)	r4   sr8   descriptionri   rulemodnameprovider_srcfs	            r    scanzDependencyScanner.scan   s]   | 	$ 	$GAtNN1d####$
 $

  	. 	.IC"&"2"@"E D
 d///#'#7#7T#B#B"CYdl""#|C0  G#'#3#7#7#@#@L#s** $++&-    $ Z(,33+7484H4HW[4\4\5 5    dl"",s+Z ''$+#&,0,@,@d,K,K) )   
  ''----$,g666 	&!Ik1%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& qs   >F  F$'F$N)r#   r$   r%   r$   )r7   r$   r8   r9   r:   r;   )r7   r$   r:   r;   )ri   r$   r8   r9   r:   r$   )r:   r   )	r   r   r   r6   r@   r>   r?   rw   r   r   r   r    r"   r"   F   s        4 4 4 4& & & &+D +D +D +DZ6 6 6 6 2 2 2 2) ) ) ) ) )r   r"   argsT.List[str]r:   r   c                    t          |           dk    s
J d            | \  }}t          ||          }|                                S )Nr   zgot wrong number of arguments!)lenr"   r   )r   r%   r#   scanners       r    runr      sC    t99>>>;>>>G[W55G<<>>r   )r   r   r:   r   )%
__future__r   r/   r~   ro   rL   r)   retypingTTYPE_CHECKINGtyping_extensionsr   r   r   backend.ninjabackendr   r$   boolr	   r   Listr   r   compilerg   rh   FORTRAN_INCLUDE_PATFORTRAN_MODULE_PATFORTRAN_SUBMOD_PATFORTRAN_USE_PAT
IGNORECASErS   rT   rQ   r"   r   r   r   r    <module>r      sm  
 # " " " " "      				   				    ? (AAAAAAAAAABBBBBBi$/$4&s+%0%6(1\)]^	
 	
	 	G i$/$4&s+%0%6'-	
 	
	 	G 9)#."16#;/#AF7O4#AF7O4		
 	
 D    i    
788
>??; ; B EBJ12=AA BJ12=AA OR];;D D D D D D D DL     r   