§
    fe÷b¶%  ã                  ór  — 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	ddl
mZ ddlmZ e	j        rddl
m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é   ©Úninja_quote)Úlang_suffixes)ÚTargetDependencyScannerInfoz\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                  óF   — e Zd Zd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ÚoutfileÚsourcesúT.List[str]c                óÜ   — t          |d¦  «        5 }t          j        |¦  «        | _        d d d ¦  «         n# 1 swxY w Y   || _        || _        i | _        i | _        i | _        g | _	        d S )NÚrb)
ÚopenÚpickleÚloadÚtarget_datar   r   Úprovided_byÚexportsÚneedsÚsources_with_exports)Úselfr   r   r   Úpfs        ú</usr/lib/python3/dist-packages/mesonbuild/scripts/depscan.pyÚ__init__zDependencyScanner.__init__+   s¶   € Ý�+˜tÑ$Ô$ð 	L¨Ý<B¼KÈ¹O¼OˆDÔð	Lð 	Lð 	Lñ 	Lô 	Lð 	Lð 	Lð 	Lð 	Lð 	Lð 	Løøøð 	Lð 	Lð 	Lð 	LàˆŒØˆŒØ-/ˆÔØ)+ˆŒØ/1ˆŒ
Ø13ˆÔ!Ð!Ð!s   ‘7·;¾;ÚfnameÚreturnÚNonec                ó\  — t           j                             |¦  «        d         dd …         }|dk    r|                     ¦   «         }|t          d         v r|                      |¦  «         d S |t          d         v r|                      |¦  «         d S t          j        d|› d�¦  «         d S )Né   ÚCÚfortranÚcppz Can not scan files with suffix .ú.)	ÚosÚpathÚsplitextÚlowerr   Úscan_fortran_fileÚscan_cpp_fileÚsysÚexit)r   r   Úsuffixs      r   Ú	scan_filezDependencyScanner.scan_file5   s±   € Ý”×!Ò! %Ñ(Ô(¨Ô+¨A¨B¨BÔ/ˆØ�SŠ=ˆ=Ø—\’\‘^”^ˆFØ•] 9Ô-Ð-Ð-Ø×"Ò" 5Ñ)Ô)Ð)Ð)Ð)Ø•} UÔ+Ð+Ð+Ø×Ò˜uÑ%Ô%Ð%Ð%Ð%åŒHÐA¸ÐAÐAÐAÑBÔBÐBÐBÐBó    c                óÐ  — t          j        |¦  «        }t          ¦   «         }|                     dd¬¦  «                             d¦  «        D �]}t
                               |¦  «        }t                               |¦  «        }t                               |¦  «        }|r`| 	                    d¦  «         
                    ¦   «         }||vr5|| j        v r!| j        |                              |¦  «         n|g| 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        v r"| j        |                              |
¦  «         �Œ|
g| j        |<   �Œd S )Núutf-8Úignore©ÚencodingÚerrorsú
r"   úMultiple files provide module r&   ú:r   r   )ÚpathlibÚPathÚsetÚ	read_textÚsplitÚFORTRAN_USE_REÚmatchÚFORTRAN_MODULE_REÚFORTRAN_SUBMOD_REÚgroupr*   r   ÚappendÚaddr   ÚRuntimeErrorr   r   )r   r   Ú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_file@   s‰  € Ý”˜UÑ#Ô#ˆÝ"™uœuÐØ—O’O¨W¸X�OÑFÔF×LÒLÈTÑRÔRð .	Bñ .	BˆDÝ)×/Ò/°Ñ5Ô5ˆLÝ,×2Ò2°4Ñ8Ô8ˆLÝ%6×%<Ò%<¸TÑ%BÔ%BÐ"Øð 5Ø%×+Ò+¨AÑ.Ô.×4Ò4Ñ6Ô6�ð Ð!5Ð5Ð5Ø ¤
Ð*Ð*Øœ
 5Ô)×0Ò0°Ñ8Ô8Ð8Ð8à-3¨H˜œ
 5Ñ)Øð 6Ø".×"4Ò"4°QÑ"7Ô"7×"=Ò"=Ñ"?Ô"?�Ø&Ð.BÐBÐBÐBÐBØ$×(Ò(¨Ñ9Ô9Ð9Ø" dÔ&6Ð6Ð6Ý&Ð'ZÈÐ'ZÐ'ZÐ'ZÑ[Ô[Ð[ØÔ)×0Ò0°Ñ7Ô7Ð7Ø49�Ô  Ñ1Ø&5�”˜UÑ#Ø%ð Bð +A×*FÒ*FÀqÑ*IÔ*I×*OÒ*OÑ*QÔ*QÐ'Ø%<×%BÒ%BÀ3Ñ%GÔ%GÈÔ%JÐ"Ø!7×!=Ò!=¸aÑ!@Ô!@×!FÒ!FÑ!HÔ!H�Ø!3ÐFÐF°nÐFÐF�ØÔ)×0Ò0°Ñ7Ô7Ð7Ø05�Ô  Ñ-Ø&1�”˜UÑ#ð ˜DœJÐ&Ð&Ø”J˜uÔ%×,Ò,Ð-DÑEÔEÐEÑEà)@Ð(A�D”J˜uÑ%ùð].	Bð .	Br1   c                óJ  — t          j        |¦  «        }|                     dd¬¦  «                             d¦  «        D ]ã}t                               |¦  «        }t                               |¦  «        }|rJ|                     d¦  «        }|| j        v r!| j        |          	                    |¦  «         n|g| j        |<   |r_|                     d¦  «        }|| j
        v rt          d|› d�¦  «        ‚| j         	                    |¦  «         || j
        |<   || j        |<   Œäd S )Nr3   r4   r5   r8   r"   r9   r&   )r;   r<   r>   r?   ÚCPP_IMPORT_RErA   ÚCPP_EXPORT_RErD   r   rE   r   rG   r   r   )r   r   rH   rJ   rK   rL   rN   rO   s           r   r,   zDependencyScanner.scan_cpp_files   s6  € Ý”˜UÑ#Ô#ˆØ—O’O¨W¸X�OÑFÔF×LÒLÈTÑRÔRð 	6ð 	6ˆDÝ(×.Ò.¨tÑ4Ô4ˆLÝ(×.Ò.¨tÑ4Ô4ˆLØð 1Ø%×+Ò+¨AÑ.Ô.�Ø˜DœJÐ&Ð&Ø”J˜uÔ%×,Ò,¨VÑ4Ô4Ð4Ð4à)/¨�D”J˜uÑ%Øð 6Ø".×"4Ò"4°QÑ"7Ô"7�Ø" dÔ&6Ð6Ð6Ý&Ð'ZÈÐ'ZÐ'ZÐ'ZÑ[Ô[Ð[ØÔ)×0Ò0°Ñ7Ô7Ð7Ø49�Ô  Ñ1Ø&5�”˜UÑ#øð	6ð 	6r1   Úsrcc                óX   — | j         j        |         }t          |t          ¦  «        sJ ‚|S )N)r   Úsource2objectÚ
isinstancer   )r   rW   Úobjnames      r   Úobjname_forzDependencyScanner.objname_for†   s-   € ØÔ"Ô0°Ô5ˆÝ˜'¥3Ñ'Ô'Ð'Ð'Ð'Øˆr1   c                óÐ  — t           j                             |¦  «        d         dd …                              ¦   «         }|t          d         v r[| j        |         }|                     dd¦  «        }d|v rd}nd}t           j                             | j        j	        |› d|› �¦  «        S |t          d         v r d	 
                    | j        |         ¦  «        S t          d
¦  «        ‚)Nr"   r$   r:   ú@ÚsmodÚmodr&   r%   z{}.ifczUnreachable code.)r'   r(   r)   r*   r   r   ÚreplaceÚjoinr   Úprivate_dirÚformatrG   )r   rW   r/   ÚexportedÚnamebaseÚ	extensions         r   Úmodule_name_forz!DependencyScanner.module_name_for‹   sÛ   € Ý”×!Ò! #Ñ&Ô& qÔ)¨!¨"¨"Ô-×3Ò3Ñ5Ô5ˆØ•] 9Ô-Ð-Ð-Ø”| CÔ(ˆHð  ×'Ò'¨¨SÑ1Ô1ˆHØ�hˆˆØ"�	�	à!�	Ý”7—<’< Ô 0Ô <ÀÐ>WÐ>WÈIÐ>WÐ>WÑXÔXÐXØ•} UÔ+Ð+Ð+Ø—?’? 4¤<°Ô#4Ñ5Ô5Ð5åÐ2Ñ3Ô3Ð3r1   Úintc                ó”  — | j         D ]}|                      |¦  «         Œt          | j        dd¬¦  «        5 }|                     d¦  «         | j         D �]Z}|                      |¦  «        }g }g }g }|| j        v r(|                     |                      |¦  «        ¦  «         || j	        v r/| j	        |         D ]!}|| j
        vrŒ|                     |¦  «         Œ"|D ]?}| j
        |         }	|                      |	¦  «        }
|	|k    r|                     |
¦  «         Œ@t          |d¦  «        }d„ |D ¦   «         }d„ |D ¦   «         }|rdd	                     |¦  «        z   }nd
}|rdd	                     |¦  «        z   }nd
}d                     |||¦  «        }|                     |dz   ¦  «         �Œ\	 d d d ¦  «         n# 1 swxY w Y   dS )NÚwr3   ©r6   zninja_dyndep_version = 1
Tc                ó.   — g | ]}t          |d ¦  «        ‘ŒS ©Tr   ©Ú.0Úxs     r   ú
<listcomp>z*DependencyScanner.scan.<locals>.<listcomp>º   s"   € Ð0fÐ0fÐ0fÈ!µ¸QÀÑ1EÔ1EÐ0fÐ0fÐ0fr1   c                ó.   — g | ]}t          |d ¦  «        ‘ŒS rn   r   ro   s     r   rr   z*DependencyScanner.scan.<locals>.<listcomp>»   s"   € Ð-`Ð-`Ð-`Àq­k¸!¸TÑ.BÔ.BÐ-`Ð-`Ð-`r1   z| ú Ú zbuild {} {}: dyndep {}r8   r   )r   r0   r   r   Úwriter\   r   rE   rh   r   r   r   rb   rd   )r   ÚsÚofilerW   ÚobjfilenameÚmods_and_submods_neededÚmodule_files_generatedÚmodule_files_neededÚmodnameÚprovider_srcÚprovider_modfileÚquoted_objfilenameÚquoted_module_files_generatedÚquoted_module_files_neededÚmod_genÚmod_depÚ
build_lines                    r   ÚscanzDependencyScanner.scanœ   s{  € Ø”ð 	ð 	ˆAØ�NŠN˜1ÑÔÐÐÝ�$”, ¨gÐ6Ñ6Ô6ð (	/¸%Ø�KŠKÐ4Ñ5Ô5Ð5Ø”|ð &/ñ &/�Ø"×.Ò.¨sÑ3Ô3�Ø*,Ð'Ø)+Ð&Ø&(Ð#Ø˜$Ô3Ð3Ð3Ø*×1Ò1°$×2FÒ2FÀsÑ2KÔ2KÑLÔLÐLØ˜$œ*Ð$Ð$Ø#'¤:¨c¤?ð Dð D˜Ø"¨$Ô*:Ð:Ð:ð !à3×:Ò:¸7ÑCÔCÐCÐCà6ð Eð E�GØ#'Ô#3°GÔ#<�LØ'+×';Ò';¸LÑ'IÔ'IÐ$à# sÒ*Ð*Ø+×2Ò2Ð3CÑDÔDÐDøå%0°¸dÑ%CÔ%CÐ"Ø0fÐ0fÐOeÐ0fÑ0fÔ0fÐ-Ø-`Ð-`ÐL_Ð-`Ñ-`Ô-`Ð*Ø0ð !Ø" S§X¢XÐ.KÑ%LÔ%LÑL�G�Gà �GØ-ð !Ø" S§X¢XÐ.HÑ%IÔ%IÑI�G�Gà �GØ5×<Ò<Ð=OØ=DØ=DñFô F�
ð —’˜J¨Ñ-Ñ.Ô.Ð.Ñ.ðM&/ð(	/ð (	/ð (	/ñ (	/ô (	/ð (	/ð (	/ð (	/ð (	/ð (	/ð (	/øøøð (	/ð (	/ð (	/ð (	/ðR ˆqs   ·E9F=Æ=GÇGN)r   r   r   r   r   r   )r   r   r   r    )rW   r   r   r   )r   ri   )
Ú__name__Ú
__module__Ú__qualname__r   r0   r+   r,   r\   rh   r†   © r1   r   r
   r
   *   s©   € € € € € ð4ð 4ð 4ð 4ð	Cð 	Cð 	Cð 	Cð1Bð 1Bð 1Bð 1Bðf6ð 6ð 6ð 6ð&ð ð ð ð
4ð 4ð 4ð 4ð",ð ,ð ,ð ,ð ,ð ,r1   r
   Úargsr   r   ri   c                ó  — t          | ¦  «        dk    s
J d¦   «         ‚| \  }}}t          |d¬¦  «        5 }t          j        |¦  «        }d d d ¦  «         n# 1 swxY w Y   t	          |||¦  «        }|                     ¦   «         S )Né   zgot wrong number of arguments!r3   rl   )Úlenr   Újsonr   r
   r†   )r‹   r   r   ÚjsonfileÚfr   Úscanners          r   Úrunr“   Ê   s¹   € Ýˆt‰9Œ9˜Š>ˆ>ˆ>Ð;‰>Œ>ˆ>Ø%)Ñ"€K�˜(Ý	ˆh Ð	)Ñ	)Ô	)ð ¨QÝ”)˜A‘,”,ˆðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð å ¨W°gÑ>Ô>€GØ�<Š<‰>Œ>Ðs   µAÁAÁA)r‹   r   r   ri   )Ú
__future__r   r�   r'   r;   r   Úrer-   ÚtypingÚTÚbackend.ninjabackendr   Úcompilers.compilersr   ÚTYPE_CHECKINGr   ÚcompilerU   rV   ÚFORTRAN_INCLUDE_PATÚFORTRAN_MODULE_PATÚFORTRAN_SUBMOD_PATÚFORTRAN_USE_PATÚ
IGNORECASErB   rC   r@   r
   r“   rŠ   r1   r   ú<module>r¡      si  ðð #Ð "Ð "Ð "Ð "Ð "à €€€Ø 	€	€	€	Ø €€€Ø €€€Ø 	€	€	€	Ø 
€
€
€
Ø Ð Ð Ð à .Ð .Ð .Ð .Ð .Ð .Ø /Ð /Ð /Ð /Ð /Ð /à„?ð CØBÐBÐBÐBÐBÐBà�”
Ð7Ñ8Ô8€Ø�”
Ð>Ñ?Ô?€à;Ð Ø;Ð ØBÐ ØE€à�B”JÐ1°2´=ÑAÔAÐ Ø�B”JÐ1°2´=ÑAÔAÐ Ø�”˜O¨R¬]Ñ;Ô;€ð^ð ^ð ^ð ^ð ^ñ ^ô ^ð ^ð@ð ð ð ð ð r1   