o
    nc                     @  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mZ G d
d deZdd ZdS )    )annotationsN   )ExtensionModule
ModuleInfo   )dependencies)mlog)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__ whome/ych/rk3568/buildroot/output/rockchip_rk3568_recovery/host/lib/python3.10/site-packages/mesonbuild/modules/dlang.pyr   "   s   
zDlangModule.__init__c                 C  sj   t jd u rtjj| _| jt _nt j| _t jd u r#| || _| jt _nt j| _| js1| js3tdd S d S )NzDUB not found.)r   class_dubbinr   ZDubDependency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 ]t\}	}
|	dkri ||	< t|
tr|
D ].}t|tjr| }| d|g\}}|dkr| }|d u rd||	 |< q{|||	 |< q{qht|
tj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 publishedr   Zdescribe w   F)indentensure_ascii)r   init_dubr   ospathjoinexistsopenjsonload
ValueErrorr   warningbolditems
isinstancelistr   Z
Dependency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   9   sb   



"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   r9   rC   poutr   r   r   r5   m   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
   rD   rE   r   r/   formatr)   FileNotFoundErrorPermissionErrorlogr0   get_pathrF   Zred)r   r   r   rG   rH   r   r   r   r   q   s*   

zDlangModule.check_dubN)__name__
__module____qualname__r   r&   r   INFOr   r   r	   strr   r5   r   __classcell__r   r   r   r   r      s    



3r   c                  O  s   t | i |S rP   )r   )r9   r:   r   r   r   
initialize   s   rW   )
__future__r   r,   r'   r!   r   r   r   r   Zinterpreterbaser	   Zmesonlibr
   r   r   rW   r   r   r   r   <module>   s   k