
    -PhQ                       d dl m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Z	ddl
mZmZ ddlmZmZmZmZmZmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddl m!Z! ddl"m#Z# e	j$        r)d dl%m&Z& ddlm'Z' ddlm(Z( ddlm)Z)  G d de&          Z*eZ+ne,Z+ G d de          Z- G d de          Z. G d de!          Z/ G d de+          Z0 G d dee0          Z1 G d  d!ee0          Z2 G d" d#ee0          Z3	 d3d4d.Z4e4ed/<    ed0ej5        ej6        ej7        ge-1          xed0<   Z8 ed2ej5        ej6        ge.1          xed2<   Z9dS )5    )annotationsN)Path   )mesonlibmlog   )process_method_kwDependencyExceptionDependencyMethodsDependencyTypeNameExternalDependencySystemDependency)ConfigToolDependency)packages)DependencyFactory)ExtraFrameworkDependency)PkgConfigDependency)detect_cpu_family)ExternalProgram)	OptionKey)	TypedDict)DependencyGenerator)Environment)MachineChoicec                      e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   ded	<   d
ed<   d
ed<   d
ed<   ded<   d
ed<   dS )PythonIntrospectionDictzT.Dict[str, str]install_pathsboolis_pypyis_venvis_freethreadedlink_libpythonsysconfig_pathspathsstrplatformsuffixlimited_api_suffix	variablesversionN)__name__
__module____qualname____annotations__     ^/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mesonbuild/dependencies/python.pyr   r      s         ''''))))####r0   r   c                  .     e Zd ZdgZdZdZd fd
Z xZS )Pybind11ConfigToolDependencyzpybind11-configTz--pkgconfigdirnamer%   environmentr   kwargsT.Dict[str, T.Any]c                    t                                          |||           | j        sd S |                     dgd          | _        d S )Nz
--includescompile_argssuper__init__is_foundget_config_valuer9   selfr4   r5   r6   	__class__s       r1   r<   z%Pybind11ConfigToolDependency.__init__;   sN    {F333} 	F 11<..QQr0   r4   r%   r5   r   r6   r7   )r+   r,   r-   toolsallow_default_for_crossskip_versionr<   __classcell__rA   s   @r1   r3   r3   0   s^        E # $LR R R R R R R R R Rr0   r3   c                  &     e Zd ZdgZd	 fdZ xZS )
NumPyConfigToolDependencyznumpy-configr4   r%   r5   r   r6   r7   c                    t                                          |||           | j        sd S |                     dgd          | _        d S )Nz--cflagsr9   r:   r?   s       r1   r<   z"NumPyConfigToolDependency.__init__F   sN    {F333} 	F 11:,OOr0   rB   )r+   r,   r-   rC   r<   rF   rG   s   @r1   rI   rI   B   sO        EP P P P P P P P P Pr0   rI   c                  6     e Zd Z	 	 dd fdZddZddZ xZS )BasicPythonExternalProgramNr4   r%   commandT.Optional[T.List[str]]ext_progT.Optional[ExternalProgram]c                    |%t                                          ||d           n-|| _        |j        | _        |j        | _        d | _        d| _        i ddddi i dddi dd| _        d| _        d S )NT)rM   silentz	--versionFsentinelz0.0)r   r   r    r!   r"   r#   r$   r&   r'   r(   r)   r*   )	r;   r<   r4   rM   pathcached_versionversion_arginfopure)r@   r4   rM   rO   rA   s       r1   r<   z#BasicPythonExternalProgram.__init__N   s    GGT74@@@@DI#+DL DI"&D*D  $#!" ",0
 0
	 			r0   r*   returnr   c                    | j         dk    rt          j        |d          S | j         dk    rt          j        |d          S dS )Npython2z< 3.0python3>= 3.0T)r4   r   version_compare)r@   r*   s     r1   _check_versionz)BasicPythonExternalProgram._check_versionm   sG    9	!!+GW===Y)##+GX>>>tr0   c                   dd l }|j                            dd          5 }|                                 t	          |          gz   }t
          j                                        }d|d<   t          j	        ||          \  }}}d d d            n# 1 swxY w Y   	 t          j        |          }n# t          j        $ r d }t          j        dt	          |j                  |j        fz             t          j        d           t          j        |           t          j        d	           t          j        |           Y nw xY w|7|                     |d
                   rt%          j        d|          | _        dS dS )Nr   zmesonbuild.scriptszpython_info.pystdlibSETUPTOOLS_USE_DISTUTILS)envz.Could not introspect Python (%s): exit code %dzProgram stdout:
zProgram stderr:
r*   r   TF)importlib.resources	resourcesrT   get_commandr%   osenvironcopyr   
Popen_safejsonloadsJSONDecodeErrorr   debugargs
returncoder_   TcastrW   )	r@   	importlibfcmdrc   pstdoutstderrrW   s	            r1   sanityz!BasicPythonExternalProgram.sanityt   s    	#""" %%&:<LMM 	BQR""$$Ax/C*//##C.6C*+ ( 3CS A A AAvv		B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B	:f%%DD# 	 	 	DJG3qv;;XYXdJeefffJ*+++JvJ*+++Jv	  3 3DO D D8$??DI45s%   A#BBBB0 0BEE)NN)r4   r%   rM   rN   rO   rP   )r*   r%   rY   r   )rY   r   )r+   r,   r-   r<   r_   ry   rF   rG   s   @r1   rL   rL   M   sp        EI9=      >          r0   rL   c                  8    e Zd ZddZdd
ZddZddZdddZdS )_PythonDependencyBasepython_holder'BasicPythonExternalProgram'embedr   c                   || _         |j        d         | _        |j        d         | _        |j        d         | _        |j        d         | _        |j        d         | _        |j        d         | _        |j        d         p|| _        d | _        t          j
        | j        d          rd	| _        nd
| _        t          j                    r| j        r| xj        dgz  c_        d S d S d S )Nr*   r&   r)   r$   r   r!   r"   r]      r   z-DPy_GIL_DISABLED)r~   rW   r*   r&   r)   r$   r   r!   r"   r   r^   major_version
is_windowsr9   )r@   r|   r~   s      r1   r<   z_PythonDependencyBase.__init__   s    
).y9%*:6&+K8"'0
$))4,12CD ,01ABKe26	#DL(;; 	#!"D!"D
    	7T%9 	7"5!66	7 	7 	7 	7r0   r5   'Environment'rY   Nonec                   | j         rL| j        dk    rd}nd}t          j                            | j                            d          d          }|g}n>d| j         }d| j        v r|| j        d         z  }d| j        v r|| j        d         z  }g }| j        	                    |||          }||| _
        d	| _        d S d S )
Nr   zpypy3-czpypy-cbasebinpython	DEBUG_EXTABIFLAGST)r   r   rg   rT   joinr)   getr*   clib_compilerfind_library	link_argsr=   )r@   r5   libnamelibdirlibdirslargss         r1   
find_libpyz _PythonDependencyBase.find_libpy   s    < 	!Q&&#"W\\$."4"4V"<"<eDDFhGG-t|--Gdn,,4>+66T^++4>*55G"//gNN"DN DMMM r0   r%   c                   | j                             d          r9d| j         v rdS d| j         v rdS d| j         v rdS t          d| j         d          | j         dk    rdS | j         d	v rdS | j         d
v rdS t          d          )Nmingwx86_64i686x86aarch64z)MinGW Python built with unknown platform z, please file a bugwin32>   	win-amd64win64>   	win-arm64z1Unknown Windows Python platform {self.platform!r})r&   
startswithr
   )r@   s    r1   get_windows_python_archz-_PythonDependencyBase.get_windows_python_arch   s    =##G,, 	4=((x4=((udm++ y)*zVZVc*z*z*z{{{]g%%5]4448]m++9!"UVVVr0   limited_apirN   c                j   | j                             d          rp| j                            d          }| j                            d          }| j                            dd          }| j        rt          d          d| dz  }n|r|d	         }|                                 }|j        d
k    ri|dk    r|dk    rt          d          }n|dk    rt          d| d          }nv| j        rt          d| d          }nZt          d| d          }nE| j        rt          d          d| dz  }nt          d          d| dz  }| j	        j
        j                            t          d                    }t          |t                    sJ | j	        j
        j                            t          d                    }|p|dk    }	d}
t          d          | j	        j
        j        v r*| j	        j
        j                            d          }|dv rd}
|	rB|
r@| j                            d          s&t#          j        t'          j        d                     t          | j                            d                    |z  }n| j                             d          r| j        r8|r| j                            d          }nR| j                            d          }n7|r| j                            d           }n| j                            d!          }t          | j                            d"                    |z  }nt+          j        d#          |                                s6t#          j        d$                    t          |                               d S t          |          gS )%Nwinpy_version_nodotpy_version_shortimplementation_lowerr   libs	libpythonz.ar   gccpypyz3.8zlibpypy3-c.dlllibpypyz-c.dllzt.dllz.dllzt.libz.lib	buildtypern   Fb_vscrt>   mddmtdfrom_buildtypestatic_from_buildtypeTPy_DEBUGau                              Using a debug build type with MSVC or an MSVC-compatible compiler
                            when the Python interpreter is not also a debug build will almost
                            certainly result in a failed build. Prefer using a release build
                            type or a debug Python interpreter.
                            base_prefixr   ABI3DLLLIBRARYLIBRARYABI3LDLIBRARY	LDLIBRARYLIBDIRzDOn a Windows path, but the OS doesn't appear to be Windows or MinGW.z#Could not find Python3 library {!r})r&   r   r)   r   staticr   get_compileridr!   rc   coredataoptstoreget_value_forr   
isinstancer%   	get_valuer   warningtextwrapdedentr   MesonBugExceptionexistslogformat)r@   r   vernumverdot	imp_lowerlibpathcompr   rn   is_debug_buildvscrt_debugvscrtlibr   s                 r1   get_windows_link_argsz+_PythonDependencyBase.get_windows_link_args   s   =##E** A	Y^''(:;;F^''(:;;F**+A8LLI{ ,"v,,)?V)?)?)?? '#AYF((**7e## F**v"&'7"8"8"f,,"&'?'?'?'?"@"@/ B&*+AF+A+A+A&B&BGG&*+@F+@+@+@&A&AGG+ G"&v,,1G&1G1G1G"G"&v,,1F&1F1F1F"F !% 1 : H HS^I_I_ ` `I%i55555 H-6DDYwEWEWXXE%*%Bi7.BN"'K ++tx/@/III $ 1 : D DY O O $]]]*.K% "+ "dn>P>PQ[>\>\ "X_ 6  &! &! " " " t~))-8899GCCC]%%g.. 	Y{ 	> <"n001ABBGG"n00;;GG >"n00AAGG"n00==Gt~))(3344w>CC,WY Y Yzz|| 	H:AA#c((KKLLL4Czr0   Frc   c                   	 |                                  }n@# t          $ r3}t          j        t	          |                     d| _        Y d}~dS d}~ww xY wt          |j        j        j	                  }||k    r<t          j        dt          j
        | j                  d| d|            d| _        dS |                     |          }|	d| _        dS || _        d| _        dS )z{
        Find python3 libraries on Windows and also verify that the arch matches
        what we are building for.
        FNNeedzfor z, but found T)r   r
   r   r   r%   r=   r   r   	compilershostboldr4   r   r   )r@   rc   r   pyarchearchr   s          r1   find_libpy_windowsz(_PythonDependencyBase.find_libpy_windows  s    
	1133FF" 	 	 	HSVV!DMFFFFF	 !!7!<==6>>HVTYty113T$3T3TF3T3TUUU!DMF**;77=!DMFs    
A(AAN)r|   r}   r~   r   )r5   r   rY   r   rY   r%   )r   r   rY   rN   F)rc   r   r   r   rY   r   )r+   r,   r-   r<   r   r   r   r   r/   r0   r1   r{   r{      s        7 7 7 7:! ! ! !*W W W W$F F F FP      r0   r{   c                      e Zd Z	 dddZdS )PythonPkgConfigDependencyFr4   r%   r5   r   r6   r7   installationr}   libpcr   c                   |rt          j        d|d           nt          j        d|d           t          j        | |||           t                              | ||                    dd                     |r$| j        st          j        d| j         d           | j        s!t          j
        | j        d          rg | _        | j        j        j                                        r\d	| j        v rU| j        d	         }|                    d
          r5| xj        d|z   gz  c_        | j        | xj        d|z   gz  c_        d S d S d S d S d S )NzSearching for z via pkgconfig lookup in LIBPCz/ via fallback pkgconfig lookup in default pathsr~   Fz"python-zT" could not be found in LIBPC, this is likely due to a relocated python installationz< 3.8PYTHONFRAMEWORKPREFIXz/Applications/Xcode.app/z-Wl,-rpath,)r   rn   r   r<   r{   r   r=   r*   r"   r   r^   r   rc   machinesr   	is_darwinr)   r   raw_link_args)r@   r4   r5   r6   r   r   framework_prefixs          r1   r<   z"PythonPkgConfigDependency.__init__8  s     	aJNNNNOOOOJ____```$T4fEEE&&t\6::gu;U;UVVV 	F 	FJ  E$,  E  E  E  F  F  F " 	 x'?g'V'V 	 DN 8!++-- 	M2IT^2[2[#~.EF**+EFF M=3C#C"DD%1&&=;K+K*LL&&&&	M 	M2[2[M M11r0   Nr   )
r4   r%   r5   r   r6   r7   r   r}   r   r   r+   r,   r-   r<   r/   r0   r1   r   r   6  s9          %M M M M M M Mr0   r   c                      e Zd Zdd	Zd
S )PythonFrameworkDependencyr4   r%   r5   r   r6   r7   r   r}   c                    t          j        | |||           t                              | ||                    dd                     d S )Nr~   F)r   r<   r{   r   )r@   r4   r5   r6   r   s        r1   r<   z"PythonFrameworkDependency.__init__V  sE     )$k6JJJ&&t\6::gu;U;UVVVVVr0   Nr4   r%   r5   r   r6   r7   r   r}   r   r/   r0   r1   r   r   T  s.        W W W W W Wr0   r   c                  .    e Zd Zdd	Zedd            ZdS )PythonSystemDependencyr4   r%   r5   r   r6   r7   r   r}   c                R   t          j        | |||           t                              | ||                    dd                     | j        rAt          j                    r|                     |d           n|                     |           nd| _	        t          j
        | j                            d          | j                            d          | j                            d          g          }| xj        d |D             z  c_        t          j                    rR|                                                     d	          r+t          j        | j        d
          r| xj        dgz  c_        | j                            dd|| j                  d         s	d| _	        d S d S )Nr~   F)r   T	INCLUDEPYincludeplatincludec                    g | ]	}|d |z   
S )z-Ir/   ).0rT   s     r1   
<listcomp>z3PythonSystemDependency.__init__.<locals>.<listcomp>s  s!    HHHd4HdTkHHHr0   64z<3.12z-DMS_WIN64=zPython.h )
extra_argsr   )r   r<   r{   r   r"   r   r   r   r   r=   
OrderedSetr)   r$   r9   r   endswithr^   r*   r   
has_header)r@   r4   r5   r6   r   	inc_pathss         r1   r<   zPythonSystemDependency.__init__^  s   !$k6BBB&&t\6::gu;U;UVVV  	!"$$ -'''GGGG,,,, DM 'N{++JNN9%%JNN=)))+ , ,	
 	HHiHHHH    	1T%A%A%C%C%L%LT%R%R 	1W_Woptp|  F  XG  XG 	1-0!,,Z[UYUf,gghij 	"!DMMM	" 	"r0   rY   c                     dS )N	sysconfigr/   r/   r0   r1   	log_triedz PythonSystemDependency.log_tried}  s    {r0   Nr   r   )r+   r,   r-   r<   staticmethodr   r/   r0   r1   r   r   \  sH        " " " ">    \  r0   r   rc   r   for_machine'MachineChoice'r6   r7   r   (T.Optional['BasicPythonExternalProgram']rY   T.List['DependencyGenerator']c           	        t          t          j        t          j        h|          }|                    dd          }g }|d u}|.t          dt          j                  }|                                 |j	        d                             d          p|j	        d         }t          j        |v r|r|j	        d                             d          |r"t          j
        |j	        d         d          rd	nd
}	d| |	 }
dfd}t          j        |_        |                    t          j        ||
| ||                     0|                    t          j        t          |
| ||                     n/|                    t          j        t           d| |                     t          j        |v r0|                    t          j        t"          d| ||                     t          j        |v r_|                                }t          j
        |d          rdg|d<   |                    t          j        t(          d| ||                     |S )Nr~   Fr\   r)   	LDVERSIONr*   LIBPCz>=3.8z-embedr   zpython-r4   r%   rc   r   r6   r7   r   r}   rY   'ExternalDependency'c                   s't          t          d          |i           }d|_        |S t          j                            dd           }t          j                            dd           }t          j        d<   	 t          | |||d          dd} |d|            |d|           S # dd} |d|            |d|           w xY w)N	pkgconfigr   PKG_CONFIG_LIBDIRPKG_CONFIG_PATHTr4   r%   valuerY   r   c                f    ||t           j        | <   d S | t           j        v rt           j        | = d S d S N)rg   rh   )r4   r  s     r1   set_envz?python_factory.<locals>.wrap_in_pythons_pc_dir.<locals>.set_env  s?     ,/4BJt,,,!RZ// "
4 0 0 0 0/r0   )r4   r%   r  r%   rY   r   )r   r   r4   rg   rh   popr   )	r4   rc   r6   r   emptyold_pkg_libdirold_pkg_pathr  
pkg_libdirs	           r1   wrap_in_pythons_pc_dirz.python_factory.<locals>.wrap_in_pythons_pc_dir  s   ! !./A+/N/NPSUWXXE!)EJ L!#0CT!J!J!z~~.?FF2<
./	=4T3VZ[[1 1 1 1
 G/@@@G-|<<<<1 1 1 1
 G/@@@G-|<<<<s   ;B* *Cr   z>= 3z/Library/Frameworksr$   Python)
r4   r%   rc   r   r6   r7   r   r}   rY   r  )r	   r   	PKGCONFIGSYSTEMr   rL   r   python_commandry   rW   r^   r   r   append	functoolspartialr   r   EXTRAFRAMEWORKri   r   )rc   r   r6   r   methodsr~   
candidatesfrom_installationpkg_version	pkg_embedpkg_namer  nkwargsr  s                @r1   python_factoryr%    sc   
  !2!<>O>V WY_``GJJw&&E02J$D01)X=TUU#K044[AAa\EVW`EaK"g-- %	^%*;7;;GDDJ$)uh.F|GXYbGcel.m.musuI99i99H= = = = = =. 0I/R",i/0FRUW]_kllmmm %!!)"34MxY\^dfr"s"sttti/0CYPSU[\\]]]7**)+,BHcSY[ghhiii'722++--#K88 	7 !66GG)+,ExQTV]_kllmmmr0   r\   pybind11)configtool_classnumpyr  )
rc   r   r   r  r6   r7   r   r  rY   r  ):
__future__r   r  rk   rg   r   pathlibr   typingrq   r   r   r   r   r	   r
   r   r   r   r   
configtoolr   detectr   factoryr   	frameworkr   r	  r   r5   r   programsr   optionsr   TYPE_CHECKINGtyping_extensionsr   r   r   r   r   _Baseobjectr3   rI   rL   r{   r   r   r   r%  r  CONFIG_TOOLCMAKEpybind11_factorynumpy_factoryr/   r0   r1   <module>r:     s   # " " " " " $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $                   F  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F , , , , , ,       & & & & & & / / / / / / * * * * * * + + + + + + & & & & & &      ? ++++++,,,,,,))))))((((((    )    EEER R R R R#7 R R R$P P P P P 4 P P P@ @ @ @ @ @ @ @Fd d d d dE d d dLM M M M M 35J M M M<W W W W W 8:O W W W# # # # #-/D # # #N MQB B B B BH % *;*; "3"?ARAXY1+ + +  ' %6$5 "3"?@.% % %  MMMr0   