
    eA                    p    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      Zd	dZy)
    )annotationsN)Path   )
Popen_safe
split_argsc                  >    e Zd ZddZd	dZd	dZd
dZddZdddZy)ExternalProjectc                H   |j                   | _         |j                  | _        |j                  | _        |j
                  | _        |j                  | _        |j                  | _	        |j                  | _
        |j                  | _        t        |j                        | _        y N)namesrcdirsrc_dirbuilddir	build_dir
installdirinstall_dirlogdirlog_dirverbose	stampfiledepfiler   make)selfoptionss     D/usr/lib/python3/dist-packages/mesonbuild/scripts/externalproject.py__init__zExternalProject.__init__   sq    LL	~~ ))"--~~ **w||,	    c                   t        | j                  dd      5 }|j                  | j                   d       t	        j
                  | j                        D ]  \  }}}|D cg c]  }|j                  d      r| c}|d d  |D ]^  }|j                  d      rt        ||      }|j                  dj                  |j                         j                  dd                   `  	 d d d        y c c}w # 1 sw Y   y xY w)	Nwutf-8encodingz: \
.z  {} \
 z\ )openr   writer   oswalkr   
startswithr   formatas_posixreplace)r   fdirpathdirnames	filenamesdfnamepaths           r   write_depfilezExternalProject.write_depfile%   s    $,,g6 	U!GGt~~&f-.020E U,9*2LQ!,,s:KqL& UE'', /DGGK..t}}/F/FsE/RST	UU	U 	U M	U 	Us%   A	C7"C29C2=A+C72C77D c                `    t        | j                  dd      5  	 d d d        y # 1 sw Y   y xY w)Nr   r    r!   )r%   r   )r   s    r   write_stampfilezExternalProject.write_stampfile0   s*    $..#8 		 	 	s   $-c                n    t        | j                  dgz         \  }}}|j                  dk(  r	d|v sd|v ryy)Nz	--versionr   zGNU MakewafTF)r   r   
returncode)r   poes       r   supports_jobs_flagz"ExternalProject.supports_jobs_flag4   s;    TYY+671a<<1*/UaZr   c                   | j                   j                         }| j                         r&|j                  dt	        j
                                 | j                  d|      }|dk7  r|S | j                   j                         }i }| j                  |d<   |j                  d       | j                  d||      }|dk7  r|S | j                          | j                          y)Nz-jbuildr   DESTDIRinstall)
r   copyr=   appendmultiprocessing	cpu_count_runr   r4   r6   )r   make_cmdrcinstall_cmdinstall_envs        r   r?   zExternalProject.build:   s    99>>#""$OOb!:!:!< =>?YYw)7Iiinn&!%!1!1I9%YYy+{;7Ir   Nc                   dt        |      z   dz   t        | j                        z   dz   }t        | j                  | j                   d| d      }d }| j
                  s3t        |dd      }|j                  |dz          |j                          nt        |       t        j                  j                         }|r|j                  |       t        |t        j                   || j                  |	      \  }}	}
|j"                  d
k7  r:| d|j"                   d}| j
                  s|dt        |      z   z  }t        |       |j"                  S )NzRunning command z in directory 
-z.logr   r    r!   )stderrstdoutcwdenvr   z step returned error code r#   z
See logs: )strr   r   r   r   r   r%   r&   flushprintr'   environrB   updater   
subprocessSTDOUTr9   )r   stepcommandrQ   mlog_filenameoutputrun_envr:   r;   r<   s              r   rF   zExternalProject._runO   s   W-0@@3t~~CVVY]]DLLTYYKqd*CD||,g>FLLT"LLN!H**//#NN3WZ->->v!%!(*1a <<1&21<<.BA<<^c,&777!H||r   )r   zargparse.Namespace)returnNone)r_   bool)r_   intr   )rY   rR   rZ   T.List[str]rQ   zT.Optional[T.Dict[str, str]]r_   rb   )	__name__
__module____qualname__r   r4   r6   r=   r?   rF    r   r   r	   r	      s!    	-	U*r   r	   c                   t        j                         }|j                  d       |j                  d       |j                  d       |j                  d       |j                  d       |j                  d       |j                  dd	       |j                  d
       |j                  d       |j                  |       }t	        |      }|j                         S )Nz--namez--srcdirz
--builddirz--installdirz--logdirz--makez	--verbose
store_true)actionr   r   )argparseArgumentParseradd_argument
parse_argsr	   r?   )argsparserr   eps       r   runrr   f   s    $$&F
!

#
%
'

#
!
L9
$
	"%G		!B88:r   )ro   rc   r_   rb   )
__future__r   r'   rk   rD   rW   pathlibr   typingTmesonlibr   r   r	   rr   rg   r   r   <module>rx      s1    # 	      -K KZr   