o
    e                     @  s   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 deZdd ZdS )    )annotationsN   )ExtensionModule
ModuleInfo   )mlog)
Dependency)DubDependency)typed_pos_args)
Popen_safeMesonExceptionc                      s\   e Zd ZdZdZeddZ fddZdd Ze	d	e
e
d
d ZdddZdd Z  ZS )DlangModuleNFZdlangz0.48.0c                   s"   t  | | jd| ji d S )Ngenerate_dub_file)super__init__methodsupdater   )selfinterpreter	__class__ =/usr/lib/python3.10/site-packages/mesonbuild/modules/dlang.pyr   #   s   
zDlangModule.__init__c                 C  sh   t jd u rtj| _| jt _nt j| _t jd u r"| || _| jt _nt j| _| js0| js2tdd S d S )NzDUB not found.)r   class_dubbinr	   dubbin	check_dubr   )r   stater   r   r   	_init_dub)   s   



zDlangModule._init_dubzdlang.generate_dub_filec              	   C  s   t js| | d|d i}tj|d d}tj|rIt|dd}zt	|}W n t
y9   td Y nw W d    n1 sDw   Y  dd	g}|D ]}||vrc||vrctd
t|d qO| D ]r\}	}
|	dkri ||	< t|
tr|
D ]-}t|tr| }| d|g\}}|dkr| }|d u rd||	 |< q{|||	 |< q{qht|
tr|
 }| d|g\}}|dkr|
 }|d u rd||	 |< qh|||	 |< qh|
||	< qht|ddd}|tj|ddd W d    d S 1 sw   Y  d S )Nnamer   r   zdub.jsonzutf-8)encodingz#Failed to load the data in dub.jsondescriptionlicenseZWithoutz"the DUB package can't be publisheddependenciesZ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configZconfig_pathZofileZwarn_publishingargkeyvaluedepr   retresversionr   r   r   r   :   s`   





"zDlangModule.generate_dub_filec                 C  s0   t | j | |ddd \}}|j| fS )N)envr   r   )r   r   get_command
returncodestrip)r   r;   rE   poutr   r   r   r7   n   s   "zDlangModule._call_dubbinc              	   C  s   |j ddd}| r>z%t| dg dd \}}|jdkr/tdd|  d	}W n t	t
fy=   d	}Y nw d	}|rTtd
t| d|   |S td
td |S )NZdubT)Zsilentz	--versionr   r   z"Found dub {!r} but couldn't run it Fz
Found DUB:z(%s)ZNO)Zfind_programfoundr   rF   rG   r   r1   formatr+   FileNotFoundErrorPermissionErrorlogr2   get_pathrH   Zred)r   r   r   rI   rJ   r   r   r   r   r   s*   

zDlangModule.check_dubN)__name__
__module____qualname__r   r(   r   INFOr   r   r
   strr   r7   r   __classcell__r   r   r   r   r      s    



3r   c                  O  s   t | i |S rR   )r   )r;   r<   r   r   r   
initialize   s   rY   )
__future__r   r.   r)   r#   r   r   r   r"   r   Zdependencies.dubr	   Zinterpreterbaser
   Zmesonlibr   r   r   rY   r   r   r   r   <module>   s   k