
    eF                        d dl mZ ddlmZmZmZ ddlmZ ddlm	Z	m
Z
mZmZ ddlmZ ddlmZ d d	lZd d	lZd d	lZd d	lZej,                  rdd
lmZ  G d de      Zy	)    )annotations   )ExternalDependencyDependencyExceptionDependencyTypeName)PkgConfigDependency   )
Popen_safe	OptionKey	join_argsversion_compare)ExternalProgram)mlogN)Environmentc                  X     e Zd ZU dZded<   dZd
 fdZddZdddZdddZ	dd	Z
 xZS )DubDependencyN)T.Optional[T.Tuple[ExternalProgram, str]]class_dubbinFc                L    !"#$ t         %   t        d      ||d       | _        ddlm}m} t         %          }t        ||      sJ | _	        d|v r|j                  d       _        t        j                  4t        j                  s$ j                         t        _        dt        _        t        j                   j                  rt!        d      d	 _        y t        j                  \   _        }t         j$                  t&              sJ t)        |d
      r# j                  rt!        d| d      d	 _        y t+        j,                  dj/                  | j$                  j1                                      |#d|v r-|d   }t        |t2              rdj5                  |      }| d| # j                  j6                  t9        |j:                  j=                  t?        d                  !!dk(  rd!n!dk(  rd!d#dz   d!z   d j                  jA                         d   z   g}	 jC                  |	      \  }
}}|
dk7  rt+        j,                  d|z          d|v r_dd#g}t+        jD                  t+        jF                  #      d       t+        jH                  t+        jF                  tK        |                   d	 _        y dM!# fd   j                  jM                         jO                  d!d"      jO                  d#d$      "tQ        jR                  |      g  _*        g x _+         _,        d	$dN !" $fd%}d	 _        i }d&   D ]  }|||d'   <   |d(   s|d)   d*k(  rt+        jD                  d+       d	 _         y |d'   |k(  s@d _        |d)   d,vr2t+        jD                  t+        jF                  |      d-       d	 _         y |d    _-        | _.         i }d.   D ]
  }|||d/   <    ||vrmd	 _         j\                  d)   d0k(  r+t+        jD                  d1t+        jF                  d0      d2       n)t+        jD                  d3t+        jF                  #              j"                  st+        jD                  d4| d5       y d _/         | j\                        sd	 _        y ||   d6   D ]  }||   } ||      rd	 _         y  $rVt+        jH                  d7t+        jF                  d8             t+        jH                  t+        jF                                        ||   d9   }|d:   D ]  } jT                  ja                  |        |d;   D ]   } jT                  ja                  d<|z          " |d=   D ][  }d>| j                  jb                     vr n>| j                  jb                     d>   } jT                  ja                  | d?|        ] |d@   D ][  }d| j                  jb                     vr n>| j                  jb                     d   } jT                  ja                  | d?|        ] |dA   r jT                  ja                  |dA          |dB   D ]@  }|je                  dC      s|je                  dD      s& jV                  ja                  |       B |dE   D ]  } jV                  ja                  |         jf                  jh                  jj                  jm                         }|rg dF}|dG   D ]  }tn        j                  dHk7  rtq        ||dIdIdJ      }|j"                  r|js                         D ]  } jT                  ja                  |        |ju                         D ]  } jV                  ja                  |        |ju                  dK      D ]  } jX                  ja                  |        |r#|v r jV                  ja                  |dCz           jV                  ja                  dL|z           y )ONdubd)languager	   )	DCompilerd_feature_argsrequiredTzDUB not found.Fz>1.31.1zDUB version zC is not compatible with Meson (can't locate artifacts in Dub cache)z4Determining dependency {!r} with DUB executable {!r}version @	buildtypedebugoptimizedzrelease-debugminsizereleasedescribe--arch=--build=--compiler=r   zDUB describe failed: locallyfetchz:is not present locally. You may try the following command:c            
     x    ddddddz   dj                   j                         d   z   d	z   g	} t        |       S )
Nr   runzdub-build-deepz--yesz--r$   r&   r'   r%   )compilerget_exelistr   )cmddub_archdub_buildtypemain_pack_specselfs    =/usr/lib/python3/dist-packages/mesonbuild/dependencies/dub.pydub_build_deep_commandz6DubDependency.__init__.<locals>.dub_build_deep_commandm   sN    u.~H$mdmm6O6O6QRT6U&U]*C
 S>!    llvmldcgccgdcc           	     @   | d    d| d    }	j                  |       \  }}||s+t        j                  t        j                  |      d       nd|vr?t        j                  t        j                  |      dt        j                               nfdk7  r\d|vrXt        j                  t        j                  |      d	t        j                   d
	j                  j
                                nd|vr>t        j                  t        j                  |      dt        j                               nd|vrPt        j                  t        j                  |      dt        j                  d   j                  d                   nod|vrBt        j                  t        j                  |      dt        j                  | d         d       n)t        j                  t        j                  |      d       t        j                  d       t        j                  t        j                                       yd|vr?t        j                  t        j                  |      dt        j                               d
	j                  j                  |       y)Nnamer   r   z	not foundr,   zfound but not compiled with r9   compiler_versionzfound but not compiled with-archzfound but not compiled forplatform.configurationzfound but not compiled for thezIYou may try the following command to install the necessary DUB libraries:F
build_typezfound but not compiled asT)_find_compatible_package_targetr   errorboldr,   r   joinlogwarning	link_argsappend)pkgpack_idtgt_filecompatibilitiesdescriptionr/   r4   r0   dub_comp_idr2   show_buildtype_warnings       r3   find_package_targetz3DubDependency.__init__.<locals>.find_package_target}   s    VQs9~&67G*.*N*N{\_al*m'X&JJtyy1;?6JJtyy13QSWS\S\]hSij E).@.WJJtyy13P#yyK=$--:O:O9P)QRT?2JJtyy13OQUQZQZ[cQde6JJtyy13O#yyZ)@)E)Ec)JKM$O;JJtyy13S#yy_)=>Q JJtyy1;?de#9#;<=?2TYYw/1LdiiXeNfg)-&NN!!(+r5   packagesr;   active
targetTypedynamicLibraryz3DUB dynamic library dependencies are not supported.)librarysourceLibrarystaticLibraryzfound but it isn't a librarytargetsrootPackagerX   zDUB targets of typezare not supported.z%Could not find target description forzCould not find z in DUB descriptionlinkDependencieszKIf it is not suitable, try the following command and reconfigure Meson withz--clearcachebuildSettingsdflagsimportPathsz-IstringImportPaths
import_dir=versionsmainSourceFilesourceFilesz.libz.alflags)kernel32user32gdi32winspoolshell32ole32oleaut32uuidcomdlg32advapi32ws2_32libsnttrue)r   silent)rawz-l)returnstr)rK   T.Dict[str, str]rw   bool);super__init__r   r;   compilers.dr   r   get_compiler
isinstancer,   getr   r   r   class_dubbin_searched
_check_dubr   is_founddubbinr   r   r   debugformatget_pathlistrF   r>   rx   coredata
get_optionr   r-   _call_dubbinrD   rE   rG   r   get_idreplacejsonloadscompile_argsrI   raw_link_argsr   rK   staticrJ   idendswithenvmachineshost
is_windowsosr   get_compile_argsget_link_args)&r2   r;   environmentkwargsr   r   
_temp_compdubverversion_specdescribe_cmdretreserr	fetch_cmdrR   rS   rK   rZ   tgtlink_depbsflagpathverfiler   winlibslibpkgdepargrO   r/   r4   r0   rP   r1   rQ   	__class__s&   `                             @@@@@@@r3   r|   zDubDependency.__init__#   s   +E2KRUV	;W)+
*i000""JJz2DM%%-m6Y6Y)-):M&26M/%%-}})*:;;!DM - : :f$++777 69-}})"6(*mnp p!DM

  &t{{';';'=>	@ !),L,-"xx5 $vQ|n5N ==%% K00;;Ik<RST ,,+Mi'%M 	H(<&8Q8Q8STV8W(W
 )),7S#!8JJ.45C"G^<	

499^46rs9Y#789!DM	" 	" mm**,44VUCKKESXYjjo.00+!&%	 %	^ z* 	C$'HS[!x=< $44

PQ % 6{d" $|$,YYJJtyy0NO$)DM"9~+	0 y) 	.C*-GC&'	. w!DMxx%8 

0$))O2LNbc

BDIInD]^}}JJ.ABC  #488,!DM  &89 	H8$C&s+ %		 "HHbdhdmdmn|d}~HHTYY5789 T]?+xL 	+D$$T*	+ }% 	2D$$TD[1	2 *+ 	7D>$--2B2B#CC!$--"2"23LAD$$vQtf%56		7 j> 	6Ct}}/?/? @@!$--"2"23I>D$$vQse_5		6 $$R(8%9: }% 	,D}}V$d(;%%d+	,
 xL 	(DNN!!$'	( XX&&++668
MG f: 	,Cww$,S+F^d?ef??%668 6))0056%335 3--c23%333= 7**11#67cWn%%cFl3 NN!!$s(+%	,r5   c                f   t         j                  j                  |d   dd      }t         j                  j                  |      sy|d   }|d   }|d   }|d   }g }	|d	k7  r|	j	                  | j
                  j                         | j                  d
g      dd \  }
}|
dk7  r*t        j                  dt        j                  |             yt        j                  d|      }|X|j                         }|j                  dd      d   j                  dd      j                  dd      }|	j!                  ||g       t#               }d}t        j$                  |      D ]L  t         j                  j                  ||d         }t         j                  j                  |      st        j&                  d|z          `t#               |v rj)                  d       |v rj)                  d       t+        fd|D              rj)                  d       t+        fd|D              rj)                  d       |v rj)                  d       |d	k(  st-        fd|	D              rj)                  d       t+        fd|D              r|fc S t"        j/                  |      }O d |fS )Nr   z.dubbuild)NNrA   	buildTyper?   architecturer9   	--versionr   r	   zFailed to run {!r}zv[0-9].[0-9][0-9][0-9].[0-9]r@   r   v )rA   r?   r>   r,   r<   targetFileNamez&WARNING: Could not find a Dub target: rB   c              3  &   K   | ]  }|v  
 y wN ).0r?   entrys     r3   	<genexpr>z@DubDependency._find_compatible_package_target.<locals>.<genexpr>r  s     ?8u$?   c              3  &   K   | ]  }|v  
 y wr   r   )r   r>   r   s     r3   r   z@DubDependency._find_compatible_package_target.<locals>.<genexpr>u  s     3T45=3r   r>   r,   c              3  &   K   | ]  }|v  
 y wr   r   )r   cvr   s     r3   r   z@DubDependency._find_compatible_package_target.<locals>.<genexpr>{  s     *O22;*Or   r<   c              3  &   K   | ]  }|v  
 y wr   r   )r   keycompss     r3   r   z@DubDependency._find_compatible_package_target.<locals>.<genexpr>~  s     6C3%<6r   )r   r   rF   existsrJ   r,   r   _call_compbinr   rD   rE   researchgrouprsplitr   extendsetlistdirr   addallanyunion)r2   jdescjpackrP   dub_build_pathconfrB   	platformsarchscomp_versionsr   r   	d_ver_regfrontend_versionfrontend_idrN   
check_listtargetr   r   s                     @@r3   rC   z-DubDependency._find_compatible_package_target/  sk   eFmVWEww~~n- _%;'
*%	n% %  !6!67));-81=HCax

/;1GH#		"@#FI$#,??#4 .55c1=a@HH$WS"- $$&6%DE&)e
 [
ZZ/ #	DEWW\\.%?O9PQF77>>&) 

CfLM
 EEu}		/*U"		,'?Y??		*%3U33		&!e#		*%e#s*O*O'O		,-6:66&"%))OU"CG#	DJ o&&r5   c                    t        | j                  t              sJ t        | j                  j	                         |z   |      \  }}}|j
                  |j                         |j                         fS N)r   )r   r   r   r
   get_command
returncodestripr2   argsr   poutr   s         r3   r   zDubDependency._call_dubbin  sW    $++777 !8!8!:T!AsK3||SYY[#))+55r5   c                    t        | j                  j                         |z   |      \  }}}|j                  |j	                         |j	                         fS r   )r
   r,   r-   r   r   r   s         r3   r   zDubDependency._call_compbin  sC     !:!:!<t!CM3||SYY[#))+55r5   c                    dd} |       }|+t        j                  dt        j                  d             |S |\  }}t        j                  dt        j                  |j	                               d|z         |S )Nc                 X   t        dd      } | j                         sy 	 t        | j                         dgz         dd \  }}|j                  dk7  rBt        j                  dj                  dj                  | j                                            y 	 t        j                  d	|j                               }|r|j                  d
      }| |fS t        j                  ddj                  | j                                d|j                                 y # t        t        f$ r Y y w xY w)Nr   T)ru   r   r   r	   z"Found dub {!r} but couldn't run itr   zDUB version (\d+\.\d+\.\d+.*), r   z
Found dub z but couldn't parse version in )r   foundr
   r   r   r   rH   r   rF   FileNotFoundErrorPermissionErrorr   r   r   r   )r   r   r   vermatchr   s        r3   findz&DubDependency._check_dub.<locals>.find  s   $U48F<<>#F$6$6$8K=$HI!AN3<<1$LL "$$*F388F4F4F4H+I$JL % yy!CSYY[QH!*
 F## z#((63E3E3G*H)IIhiliririthuvw &7 s   A3D D)(D)z
Found DUB:NOz(version %s)rw   r   )r   rG   redrE   r   )r2   r   r   r   r   s        r3   r   zDubDependency._check_dub  sm    	$2 =HH\488D>2 	  %VVHH\499V__->#?#f,. r5   )r;   rx   r   z'Environment'r   zT.Dict[str, T.Any])r   ry   r   ry   rP   rx   rw   zT.Tuple[str, T.Set[str]]r   )r   zT.List[str]r   zT.Optional[T.Dict[str, str]]rw   zT.Tuple[int, str, str]r   )__name__
__module____qualname__r   __annotations__r   r|   rC   r   r   r   __classcell__)r   s   @r3   r   r      s1    >BL;B!F,XT'l6
6$r5   r   )
__future__r   baser   r   r   	pkgconfigr   mesonlibr
   r   r   r   programsr   r   r   r   r   r   typingTTYPE_CHECKINGr   r   r   r   r5   r3   <module>r     sD    # M M * J J &  	 	  ??)T& Tr5   