
    e                        d dl mZ d dlZd dlZddl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mZ  G d de      Zd Zy)    )annotationsN   )ExtensionModule
ModuleInfo   )mlog)
Dependency)DubDependency)typed_pos_args)
Popen_safeMesonExceptionc                  l     e Zd ZdZdZ edd      Z fdZd Z e	de
e
      d        Zdd	Zd
 Z xZS )DlangModuleNFdlangz0.48.0c                r    t         |   |       | j                  j                  d| j                  i       y )Ngenerate_dub_file)super__init__methodsupdater   )selfinterpreter	__class__s     :/usr/lib/python3/dist-packages/mesonbuild/modules/dlang.pyr   zDlangModule.__init__#   s2    %!7!7
 	    c                   t         j                  +t        j                  | _        | j                  t         _        nt         j                  | _        t         j                  ,| j	                  |      | _        | j                  t         _        nt         j                  | _        | j                  s| j                  st        d      y y )NzDUB not found.)r   class_dubbinr
   dubbin	check_dubr   )r   states     r   	_init_dubzDlangModule._init_dub)   s    ##+'44DK'+{{K$%22DK##+../DK'+{{K$%22DK{{;;$%566  r   zdlang.generate_dub_filec                   t         j                  s| j                  |       d|d   i}t        j                  j                  |d   d      }t        j                  j                  |      r,t        |d      5 }	 t        j                  |      }d d d        dd	g}|D ]6  }||vs||vst        j                  d
t        j                  |      d       8 |j                         D ]  \  }	}
|	dk(  ri ||	<   t        |
t               rh|
D ]b  }t        |t"              s|j%                         }| j'                  d|g      \  }}|dk(  s@|j)                         }|	d||	   |<   [|||	   |<   d t        |
t"              s|
j%                         }| j'                  d|g      \  }}|dk(  s|
j)                         }|	d||	   |<   |||	   |<   |
||	<    t        |dd      5 }|j+                  t        j,                  |dd             d d d        y # t        $ r t        j                  d       Y w xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nnamer   r   zdub.jsonzutf-8)encodingz#Failed to load the data in dub.jsondescriptionlicenseWithoutz"the DUB package can't be publisheddependenciesdescribe w   F)indentensure_ascii)r   init_dubr!   ospathjoinexistsopenjsonload
ValueErrorr   warningbolditems
isinstancelistr	   get_name_call_dubbinget_versionwritedumps)r   r    argskwargsconfigconfig_pathofilewarn_publishingargkeyvaluedepr#   retresversions                   r   r   zDlangModule.generate_dub_file:   sU   ##NN5! DG
 ggll47J777>>+&kG4 HH!YYu-FH ))4" 	_C& & Y		#8]^	_
 !,,. 	$JCn$ seT*$ 	@%c:6#&<<>D'+'8'8*d9K'LHC"ax*-//*;#*?8:F3K$58?F3K$5	@  z2 >>+D#00*d1CDHCax"'"3"3"5"?02F3K-07F3K-#s1	$4 +sW5 	JKK

6!%HI	J 	JG " HLL!FGHH HL	J 	Js6   8H::H$(IH73H:6H77H::IIc                    t        | j                  j                         |z   |      dd \  }}|j                  |j	                         fS )N)envr   r   )r   r   get_command
returncodestrip)r   rB   rP   pouts        r   r>   zDlangModule._call_dubbinn   s@    DKK335<#FqK3||SYY[((r   c                X   |j                  dd      }|j                         rw	 t        |j                         dgz         dd \  }}|j                  dk7  rCt        j                  dj                  dj                  |j                                            d	}nd	}|rKt        j                  d
t        j                  |j                               dj                         z         |S t        j                  d
t        j                  d             |S # t        t        f$ r d	}Y w xY w)NdubT)silentz	--versionr   r   z"Found dub {!r} but couldn't run it Fz
Found DUB:z(%s)NO)find_programfoundr   rQ   rR   r   r8   formatr2   FileNotFoundErrorPermissionErrorlogr9   get_pathrS   red)r   r    r   rT   rU   s        r   r   zDlangModule.check_dubr   s   ##E$#7<<>	#F$6$6$8K=$HI!AN3<<1$LL "$$*F388F4F4F4H+I$JL #F FHH\499V__->#?ciik)+  HH\488D>2 &7 s   A5D D)(D)N)__name__
__module____qualname__r   r/   r   INFOr   r!   r   strr   r>   r   __classcell__)r   s   @r   r   r      sN    LHgx(D7" -sC81J 91Jf)r   r   c                     t        | i |S rc   )r   )rB   rC   s     r   
initializerk      s    '''r   )
__future__r   r5   r0   r*   r   r   r   r(   r	   dependencies.dubr
   interpreterbaser   mesonlibr   r   r   rk    r   r   <module>rq      s6   " #  	 )  % , , 1i/ iV(r   