
    Bwg                        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m	Z	 ddl
mZ d dlmZ d dlmZ  G d d	      Z G d
 de      Zd Zd Zy)    )annotationsN)Path   )Backend)Template)chainc                      e Zd 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d	Zd
 Zy)MesonTemplatez+Template meson build file generation class.c                &   || _         t        t              j                  j	                         dz  | _        || _        || _        || _        || _	        ||| _
        ng | _
        i | _        || _        |	D cg c],  }|j                  d      r|j                  d      sd| dn|. c}| _        | j                   | j"                  | j$                  | j&                  | j(                  | j*                  g| _        |
| _        || _        d| _        y c c}w )Nzmeson.build.template'z                     )
modulenamer   __file__parentabsolutebuild_template_pathsourcesdeps	librarieslibrary_dirsinclude_dirssubstitutionsobjects
startswithendswithfortran_argsinitialize_templatesources_substitutiondeps_substitutioninclude_substitutionlibraries_substitutionfortran_args_substitutionpipeline
build_type
python_exeindent)selfr   r   r   r   r   r   object_fileslinker_argsr   r#   r$   xs                R/var/www/horilla/myenv/lib/python3.12/site-packages/numpy/f2py/_backends/_meson.py__init__zMesonTemplate.__init__   s    %N!!**,/EE 	  	"(# ,D "D# "
 \\#.1::c?as!HJ

 $$%%""%%''**
 %$
s   61D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_templateA   sa    ''//1#,,5578"#  ''1133    c                    | j                   | j                  d<   | j                  | j                  d<   | j                  | j                  d<   y )Nr   	buildtypepython)r   r   r#   r$   r2   s    r*   r   z!MesonTemplate.initialize_templateK   s>    +/??<(*.//;''+8$r4   c           	         dj                  | j                  D cg c]  }| j                   d| d c}      | j                  d<   y c c}w )N,
'''''',source_list)joinr   r%   r   )r&   sources     r*   r   z"MesonTemplate.sources_substitutionP   sA    ,1JJ;?<<H}Cxt,H-
=)Hs   Ac           	         d| j                    j                  | j                  D cg c]  }| j                    d| d c}      | j                  d<   y c c}w )Nr9   zdependency('z'),dep_list)r%   r=   r   r   )r&   deps     r*   r   zMesonTemplate.deps_substitutionU   sN    +.t{{m)<)A)A=AYYGc}LS1G*
:&G   Ac                   dj                  t        | j                        D cg c]  \  }}d| d| d c}}      | j                  d<   dj                  | j                  D cg c]  }|j                  dd       d| d	 c}      | j                  d
<   d| j                   j                  | j                  D cg c]#  }| j                   |j                  dd       d% c}      | j                  d<   d| j                   j                  t        t        | j                              D cg c]  }| j                   d| d c}      | j                  d<   y c c}}w c c}w c c}w c c}w )N
lib_dir_z( = declare_dependency(link_args : ['''-Lz'''])lib_dir_declarations._z& = declare_dependency(link_args : ['-lz'])lib_declarations,lib_listlib_dir_list)	r=   	enumerater   r   r   replacer%   rangelen)r&   ilib_dirlibs       r*   r    z$MesonTemplate.libraries_substitutionZ   sh   59YY #,D,=,=">Aw 1#EgYeT6
12 26  >> ;;s3'((NseSVW2
-. ,.dkk]);)@)@@DO}S[[S12!4O*
:& 02$++-?-D-D38T=N=N9O3PQa}HQCq)Q.
>*! P Rs   E 
%E&>(E+2E0c           	         d| j                    j                  | j                  D cg c]  }| j                    d| d c}      | j                  d<   y c c}w )Nr9   r:   r;   inc_list)r%   r=   r   r   )r&   incs     r*   r   z"MesonTemplate.include_substitutionp   sP    +.t{{m)<)A)A595F5FGc}CuD)G*
:&GrB   c                    | j                   rB| j                   ddj                  t        | j                                d| j                  d<   y d| j                  d<   y )Nzfortran_args: [z, z],r    )r   r%   r=   listr   r2   s    r*   r!   z'MesonTemplate.fortran_args_substitutionu   sW    ;;-tyyd>O>O9P/Q.RRTU ~. 24D~.r4   c                    | j                   D ]	  } |         t        | j                               }|j                  | j                        }t        j                  dd|      }|S )Nz,,rJ   )r"   r   r3   
substituter   resub)r&   nodetemplatemeson_builds       r*   generate_meson_buildz"MesonTemplate.generate_meson_build}   s[    MM 	DF	D5578))$*<*<=ffUC5r4   N)r   strr   
list[Path]r   	list[str]r   rd   r   rc   r   rc   r'   rc   r(   rd   r   rd   r#   rb   r$   rb   )returnrb   re   None)__name__
__module____qualname____doc__r+   r3   r   r   r   r    r   r!   ra    r4   r*   r
   r
      s    5++ + 	+
 + !+ !+ !+ +  + + +Z47





,

4r4   r
   c                  D     e Zd Z fdZddZddZ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nd| _        t        | j                        | _        y )Ndependenciesbbdirc              3  $   K   | ]  }d |v  
 yw)debugNrl   ).0flags     r*   	<genexpr>z(MesonBackend.__init__.<locals>.<genexpr>   s     Et7d?Es   rs   release)
superr+   	extra_datgetrp   meson_build_diranyfc_flagsr#   
_get_flags)r&   argskwargs	__class__s      r*   r+   zMesonBackend.__init__   se    $)&) NN..~rB&Et}}EEG9 	 #4==1r4   c                   t        |      | j                  z  }t        |j                  | j                   d      |j                  | j                   d            }|D ]n  }t        j
                         |j                  z  }|j                         r|j                          t        j                  ||       t        j                  |       p y )Nz*.soz*.pyd)r   r{   r   globr   cwdnameexistsunlinkshutilcopy2osremove)r&   	build_dirwalk_dirpath_objectspath_object	dest_paths         r*   _move_exec_to_rootzMesonBackend._move_exec_to_root   s    	?T%9%99MMT__-T23MMT__-U34
 ( 	#K
[%5%55I!  "LLi0IIk"	#r4   c                   t        | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                  | j                  | j                  t        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   rp   r   r   r   extra_objects
flib_flagsr}   r#   sys
executablera   r   mkdir
write_text)r&   r   meson_templatesrcmeson_build_files        r*   write_meson_buildzMesonBackend.write_meson_build   s    &OOLLNNOOMMOONN
 113YdT:	?]:##C(r4   c                4    t        j                  ||d       y )NT)r   check)
subprocessrun)r&   commandr   s      r*   _run_subprocess_commandz$MesonBackend._run_subprocess_command   s    wCt4r4   c                    dd| j                   g}| j                  ||       ddd| j                   g}| j                  ||       y )Nmesonsetupcompilez-C)r{   r   )r&   r   setup_commandcompile_commands       r*   	run_mesonzMesonBackend.run_meson   sH     '4+?+?@$$]I>"ItT5I5IJ$$_i@r4   c                   t        | j                  | j                  | j                        | _        | j	                  | j                         | j                  | j                         | j                  | j                         y )N)_prepare_sourcesr   r   r   r   r   r   r2   s    r*   r   zMesonBackend.compile   sR    't~~Vt~~.t~~&/r4   )r   r   )r   r   re   rg   rf   )
rh   ri   rj   r+   r   r   r   r   r   __classcell__)r   s   @r*   rn   rn      s"    2# *5A0r4   rn   c                   |j                         }t        |      j                  dd       |D ]L  }t        |      j                         st        |      j	                         s7t        j                   ||       N 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 )NTr   zmodule.cz-f2pywrappers2.f90z-f2pywrappers.fz.pyf)
copyr   r   r   r-   r   r   appendr   suffix)mnamer   bdirextended_sourcesr>   generated_sourcesgenerated_sources          r*   r   r      sE   ||~JTD1 &< T&\%9%9%;KK%& 	wh w()*wo&'
 :D- &""$KK($1A1F1F*FG##$4$9$9:##%	& 'F|""f, 	V 
 s   4Ec                h   g }t        j                  d      }| D ]r  }|j                  |      }|s|j                  d      j	                         j                         }|D cg c]  }|j	                  d       }}|j                  |       t t        t        j                  |            }|S c c}w )Nz--f(77|90)flags=(.*)   z'")
r\   r   matchgroupstripsplitextendrY   dictfromkeys)r}   flag_valuesflag_patternru   match_resultvaluesvalunique_flagss           r*   r~   r~      s    K::56L '#))$/!''*00288:F2893cii&9F9v&' k23L	 :s   "B/)
__future__r   r   r/   r   r   r   r\   pathlibr   _backendr   stringr   	itertoolsr   r
   rn   r   r~   rl   r4   r*   <module>r      sJ    " 	    
 	    r rj;07 ;0|4r4   