
    Ph                        d dl mZ d dlZd dlZd dlZd dlmZ ddlmZ d dl	m
Z
 d dlZ G d d      Z G d	 d
e      Zd Zy)    )annotationsN)Path   )Backend)Templatec                  Z    e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 d	dZd
dZddZddZddZd Z	y)MesonTemplatez+Template meson build file generation class.c                   || _         t        t              j                  j	                         dz  | _        || _        || _        i | _        || _	        | j                  | j                  | j                  g| _        || _        y )Nzmeson.build.template)
modulenamer   __file__parentabsolutebuild_template_pathsourcesdepssubstitutionsobjectsinitialize_templatesources_substitutiondeps_substitutionpipeline
build_type)selfr   r   r   object_fileslinker_argsc_argsr   s           fC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\numpy/f2py/_backends/_meson.py__init__zMesonTemplate.__init__   s{     %N!!**,/EE 	  	#$$%%""

 %    c                    | j                   j                         s6t        t        j                  d| j                   j                          d      | j                   j                         S )NzMeson build template z does not exist.)r   is_fileFileNotFoundErrorerrnoENOENTr   	read_textr   s    r   meson_build_templatez"MesonTemplate.meson_build_template*   sa    ''//1#,,5578"#  ''1133r   c                h    | j                   | j                  d<   | j                  | j                  d<   y )Nr   	buildtype)r   r   r   r&   s    r   r   z!MesonTemplate.initialize_template4   s*    +/??<(*.//;'r   c                    d}d| j                  | j                  D cg c]  }d| d
 c}      | j                  d<   y c c}w )N                     ,
'source_list)joinr   r   )r   indentsources      r   r   z"MesonTemplate.sources_substitution8   sI    .1&N,?,?)-6vq]6-
=)6   Ac                    d}d| j                  | j                  D cg c]  }d| d
 c}      | j                  d<   y c c}w )Nr+   r,   zdependency('z')dep_list)r/   r   r   )r   r0   deps      r   r   zMesonTemplate.deps_substitution>   sJ    +.vh)<)</3yy9y|C5#y9*
:&9r2   c                    | j                   D ]	  } |         t        | j                               }|j                  | j                        S N)r   r   r'   
substituter   )r   nodetemplates      r   generate_meson_buildz"MesonTemplate.generate_meson_buildD   s?    MMDF "D5578""4#5#566r   N)r   strr   
list[Path]r   	list[str]r   r=   r   r>   r   r>   r   r<   )returnr<   r?   None)
__name__
__module____qualname____doc__r   r'   r   r   r   r;    r   r   r	   r	      sg    5%% % 	%
 !% % % %24:

7r   r	   c                  D     e Zd Z fdZddZd ZddZddZd	dZ xZ	S )
MesonBackendc                    t        |   |i | | j                  j                  dg       | _        d| _        t        d | j                  D              rd| _        y d| _        y )Ndependenciesbbdirc              3  $   K   | ]  }d |v  
 yw)debugNrF   ).0flags     r   	<genexpr>z(MesonBackend.__init__.<locals>.<genexpr>Q   s     E}t7d?}s   rM   release)	superr   	extra_datgetrJ   meson_build_diranyfc_flagsr   )r   argskwargs	__class__s      r   r   zMesonBackend.__init__L   s[    $)&) NN..~rB&Et}}EEG 	KT 	r   c                    t        |      | j                  z  }|j                  | j                   d      }|D ]*  }t	        j
                  |t        j                                , y )Nz*.so)r   rU   globr   shutilmovecwd)r   	build_dirwalk_dirpath_objectspath_objects        r   _move_exec_to_rootzMesonBackend._move_exec_to_rootT   sN    	?T%9%99}}'8%=>'KKKTXXZ0 (r   c                     dd| j                   gS )Nmesonsetup)rU   r&   s    r   _get_build_commandzMesonBackend._get_build_commandZ   s      
 	
r   c           	     J   t        | j                  | j                  | j                  | j                  | j
                  | j                  | j                        }|j                         }t        |      j                  dd       t        |      dz  }|j                  |       |S )z1Writes the meson build file at specified locationTparentsexist_okzmeson.build)r	   r   r   rJ   extra_objects
flib_flagsrW   r   r;   r   mkdir
write_text)r   r`   meson_templatesrcmeson_build_files        r   write_meson_buildzMesonBackend.write_meson_builda   s    &OOLLOOMMOO
 113YdT:	?]:##C(r   c                |   t        j                  | j                         |      }|j                  dk7  r*t        j                  |j                  |j
                        t        j                  ddd| j                  g|      }|j                  dk7  r*t        j                  |j                  |j
                        y )N)r_   r   rf   compilez-C)
subprocessrunrh   
returncodeCalledProcessErrorrX   rU   )r   r`   completed_processs      r   	run_mesonzMesonBackend.run_mesonr   s    &NN4+B+B+D)T''1,//!,,.?.D.D  'NNit';';<)
 ''1,//!,,.?.D.D  -r   c                   t        | j                  | j                  | j                        | _        | j	                  | j                         | j                  | j                         | j                  | j                         y r7   )_prepare_sourcesr   r   r`   rt   r|   rd   r&   s    r   rv   zMesonBackend.compile   sR    't~~Vt~~.t~~&/r   )r`   r   )r`   r   r?   rA   r@   )
rB   rC   rD   r   rd   rh   rt   r|   rv   __classcell__)rZ   s   @r   rH   rH   K   s!    
1
 "0r   rH   c                J   |j                         }t        |      j                  dd       |D ]  }t        j                   ||        t        |  d      t        |  d      t        |  d      g}t        |      }|D ]a  }|j	                         st        j                   |||j
                  z         |j                  |j
                         |j                          c |D cg c]/  }t        |      j                  dk(  st        |      j
                  1 }}|S c c}w )NTrj   zmodule.cz-f2pywrappers2.f90z-f2pywrappers.fz.pyf)	copyr   ro   r]   existsnameappendunlinksuffix)mnamer   bdirextended_sourcesr1   generated_sourcesgenerated_sources          r   r~   r~      s   ||~JTD1FD!  	wh w()*wo&'
 :D-""$KK($1A1F1F*FG##$4$9$9:##%	 . '&FF|""f, 	V&  
 s   (4D )
__future__r   r#   r]   rw   pathlibr   _backendr   stringr   warningsr	   rH   r~   rF   r   r   <module>r      s:    "       :7 :7z907 90xr   