o
    eA                     @  sl   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 G dd dZdddZdS )    )annotationsN)Path   )
Popen_safe
split_argsc                   @  sJ   e Zd ZdddZdddZdd	d
ZdddZdddZddddZdS ) ExternalProjectoptionsargparse.Namespacec                 C  sP   |j | _ |j| _|j| _|j| _|j| _|j	| _	|j
| _
|j| _t|j| _d S N)namesrcdirsrc_dirZbuilddir	build_dir
installdirinstall_dirZlogdirlog_dirverbose	stampfiledepfiler   make)selfr    r   G/usr/lib/python3.10/site-packages/mesonbuild/scripts/externalproject.py__init__   s   zExternalProject.__init__returnNonec                 C  s   t | jdddG}|| j d t| jD ].\}}}dd |D |d d < |D ]}|dr2q*t||}|d	|
 d	d
 q*qW d    d S 1 sRw   Y  d S )Nwutf-8encodingz: \
c                 S  s   g | ]	}| d s|qS ).)
startswith).0dr   r   r   
<listcomp>)   s    z1ExternalProject.write_depfile.<locals>.<listcomp>r    z  {} \
 z\ )openr   writer   oswalkr   r!   r   formatas_posixreplace)r   fdirpathdirnames	filenamesfnamepathr   r   r   write_depfile%   s   

"zExternalProject.write_depfilec                 C  s6   t | jddd	 W d    d S 1 sw   Y  d S )Nr   r   r   )r&   r   )r   r   r   r   write_stampfile0   s   "zExternalProject.write_stampfileboolc                 C  s8   t | jdg \}}}|jdkrd|v sd|v rdS dS )Nz	--versionr   zGNU MakeZwafTF)r   r   
returncode)r   poer   r   r   supports_jobs_flag4   s   z"ExternalProject.supports_jobs_flagintc                 C  s   | j  }|  r|dt   | d|}|dkr|S | j  }i }| j|d< |d | d||}|dkr=|S |   | 	  dS )Nz-jbuildr   ZDESTDIRinstall)
r   copyr:   appendmultiprocessing	cpu_count_runr   r3   r4   )r   Zmake_cmdrcinstall_cmdZinstall_envr   r   r   r<   :   s    



zExternalProject.buildNstepstrcommandT.List[str]envT.Optional[T.Dict[str, str]]c                 C  s   dt | d t | j d }t| j| j d| d}d }| js4t|ddd}||d  |  nt	| t
j }|rD|| t|tj|| j|d	\}}	}
|jd
kro| d|j d}| jsk|dt | 7 }t	| |jS )NzRunning command z in directory 
-z.logr   r   r   )stderrstdoutcwdrI   r   z step returned error code r    z
See logs: )rF   r   r   r   r   r   r&   r'   flushprintr(   environr>   updater   
subprocessSTDOUTr6   )r   rE   rG   rI   mZlog_filenameoutputZrun_envr7   r8   r9   r   r   r   rB   O   s*   




zExternalProject._run)r   r	   )r   r   )r   r5   )r   r;   r
   )rE   rF   rG   rH   rI   rJ   r   r;   )	__name__
__module____qualname__r   r3   r4   r:   r<   rB   r   r   r   r   r      s    




r   argsrH   r   r;   c                 C  s   t  }|d |d |d |d |d |d |jddd	 |d
 |d || }t|}| S )Nz--namez--srcdirz
--builddirz--installdirz--logdirz--makez	--verbose
store_true)actionr   r   )argparseArgumentParseradd_argument
parse_argsr   r<   )r[   parserr   epr   r   r   runf   s   








rd   )r[   rH   r   r;   )
__future__r   r(   r^   r@   rT   pathlibr   typingTZmesonlibr   r   r   rd   r   r   r   r   <module>   s   M