o
    ld'                     @  s
  d dl mZ d dlZd dl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
mZmZmZ ddlmZmZmZmZmZmZ ddl
mZ d dlZejrQddlmZ d	d
hZd;ddZd<ddZd=ddZd>ddZd?d!d"Z d@d(d)Z!dAd,d-Z"dBdCd4d5Z#dDd9d:Z$dS )E    )annotationsN)Path   )buildminstalldependencies)MesonException
is_windowssetup_vsenv	OptionKeyget_wine_shortpathMachineChoice)mlog)InstallDatazpwsh.exezpowershell.exeparserargparse.ArgumentParserreturnNonec                 C  sh   | j ddtddd | j ddtd dd	 | j d
dddd | j ddg ddd | j dtjddd d S )Nz-Cbuilddir.zPath to build directory)desttypedefaulthelpz	--workdirz-wzDDirectory to cd into before running (default: builddir, Since 1.0.0))r   r   r   z--dump?TzXOnly print required environment (Since 0.62.0) Takes an optional file path (Since 1.1.0))nargsconstr   z--dump-formatexport)shr   Zvscodez%Format used with --dump (Since 1.1.0))r   choicesr   devcmdcommandzDCommand to run in developer environment (default: interactive shell))r   metavarr   )add_argumentr   argparseZ	REMAINDER)r    r%   qhome/ych/rk3568/buildroot/output/rockchip_rk3568_recovery/host/lib/python3.10/site-packages/mesonbuild/mdevenv.pyadd_arguments   s    

r'   T.Optional[str]c               
   C  sl   t tj} | d d }tD ]&}z|ddddt|g}t|}|  W   S  tj	t
fy3   Y qw d S )Nscriptszcmd_or_ps.ps1z
-noprofilez-executionpolicyZbypassz-file)r   __file__parentPOWERSHELL_EXESstr
subprocesscheck_outputdecodestripCalledProcessErrorOSError)Z
mesonbuildscriptshellr!   resultr%   r%   r&   get_windows_shell#   s   

r7   envT.Dict[str, str]c                 C  sR   |  d}|s	d S tdptd}|sd S t|g|d| d< td d S )NZWINEPATHZwine64Zwine;z4Meson detected wine and has set WINEPATH accordingly)getshutilwhichr   splitr   log)r8   ZwinepathZwinecmdr%   r%   r&   reduce_winepath/   s   
r@   bbuild.Builddump_fmt%T.Tuple[T.Dict[str, str], T.Set[str]]c                 C  s   t  }|ddg |d| jg | jjtj  }|r%|d|g |r)i nt	j
 }|dv r4dnd }t }t| j|hD ]}|||}|| O }qAt| ||fS )NZMESON_DEVENV1ZMESON_PROJECT_NAMEZQEMU_LD_PREFIX>   r   r   z${0})r   ZEnvironmentVariablessetproject_nameenvironmentZ
propertiesr   ZHOSTZget_sys_rootosenvironcopy	itertoolschaindevenvget_envZ	get_namesr@   )rA   rC   Z	extra_envZsysrootr8   Zdefault_fmtvarnamesir%   r%   r&   rO   9   s   rO   install_data'InstallData'T.List[str]c           
      C  s   g }t d| jdddd}| rg| jjtd}t|ts$J d| jjtd}t|ts6J dt	j
||}|jd	d|gd
}t|tsOJ dt|}|jD ]}	|t|	jjv rf||	j
 qV|S )Nzbash-completionFTz>=2.10)requiredZsilentversionprefixzfor mypydatadircompletionsdir)Z	pkgconfigZpkgconfig_define)r   ZPkgConfigDependencyrH   foundcoredata
get_optionr   
isinstancer-   rI   pathjoinZget_variabler   dataZinstall_pathparentsappend)
rA   rR   r6   deprW   rX   Zdatadir_absrY   Zcompletionsdir_pathfr%   r%   r&   bash_completion_filesM   s$   


re   autoload_pathr   
gdb_helperr-   fnamec              	   C  s~   | |j  }|jddd z%t r!t|t|tj|  W d S t	|t|tj|  W d S  t
tjfy>   Y d S w )NT)ra   exist_ok)r+   mkdirr	   r<   rK   r-   rI   r^   basenamesymlinkFileExistsErrorSameFileError)rf   rg   rh   Zdestdirr%   r%   r&   add_gdb_auto_load_   s   
""ro   
privatedirworkdirc              	   C  s  t dsd S | j}| d }t|g|jdd  R  }d}|jD ]9}|jds4|jds4|jdrYt|jj	ddd	 }|j
D ]}	t|	j}
|
j|krXt||j|
 d
}qCq |rd| d}|d }d}z&|jddd}|| vr~|| d
}W d    n1 sw   Y  W n ty   |j|dd d
}Y nw |r| }| }||}tdtt| td tdtd|j dtd |j|krtdtt|jdtd|  d S d S d S d S )NZgdbzgdb-auto-loadr   Fz-gdb.pyz-gdb.gdbz-gdb.scm-r   Tz add-auto-load-scripts-directory 
z.gdbinitzr+utf-8encodingz.Meson detected GDB helpers and added config inz+To load it automatically you might need to:z - Addzadd-auto-load-safe-path inz
~/.gdbinitz - Change current workdir tozor usez--init-command )r<   r=   r+   r   partsr`   r^   endswithnamersplittargetsrh   ro   open	readlineswriteFileNotFoundError
write_textresolverelative_tor   r?   Zboldr-   )rp   rR   rq   bdirZautoload_basedirrf   Zhave_gdb_helpersdlibnametr^   Zgdbinit_lineZgdbinit_pathZ
first_timerd   Zworkdir_pathrel_pathr%   r%   r&   write_gdb_scriptk   s^   

$







r   rN   rP   
T.Set[str]dump_formatoutputT.Optional[T.TextIO]c                 C  sD   |D ]}t | d| |  d|d |dkrt d| |d qd S )Nz="")filer   zexport )print)rN   rP   r   r   rz   r%   r%   r&   dump   s   r   optionsargparse.Namespaceintc              
   C  s6  t | jd }|d }| std| jdt| j}| jp#| j}td|j	j
td}t| | jr;| jnd }t||\}}| jr}| jrNtd| jdu r[t||| dS t| jd	d
d}	t||||	 W d    dS 1 svw   Y  dS |j	 rd}
|j	 }|rd| }|
d| 7 }
t|
 tt|d }t||| | j}|sSd|j d}tj d}|rtj!"|r|g}nCt# rt$ }|st%d |t&v r|ddg}d| d}|d|g7 }ntj ddg}|dd| dg7 }ntj dtj!'dg}d |d v rRt(j)d	d!}|*d" tj d#s1|*d$| d% t+||D ]}|*d&| d' q6|,  |-d( |-|j. nt/j0|d | d)d d*}|pf|d |d< z
t1j2|d+||d,W S  t1j3y } z	|j4W  Y d }~S d }~w t5y   td-|d  w ).Nzmeson-privatez	build.datz
Directory z- does not seem to be a Meson build directory.boolZvsenvz3--dump option does not allow running other command.Twrt   ru   r   z'An executable wrapper could be required z: zinstall.dat[]SHELLz6Failed to determine Windows shell, fallback to cmd.exez-NoLogoz-NoExitzfunction global:prompt {  "z PS " + $PWD + "> "}z-CommandZCOMSPECzC:\WINDOWS\system32\cmd.exez/kzprompt z $P$Gz/bin/shZbash)modez [ -e ~/.bashrc ] && . ~/.bashrc
ZMESON_DISABLE_PS1_OVERRIDEzexport PS1="z $PS1"
z. "z"
z--rcfilePATH)r^   F)	close_fdsr8   cwdzCommand not found: )6r   r   is_filer   r   loadrq   TcastrH   r[   r\   r   r
   r   r   rO   r    r}   Zneed_exe_wrapperZget_exe_wrapperr_   Zget_commandr   r?   r   Zload_install_datar-   r   rG   rI   rJ   r;   r^   existsr	   r7   warningr,   realpathtempfileNamedTemporaryFiler   re   flushrb   rz   r<   r=   r.   callr2   
returncoder   )r   rp   Z	buildfilerA   rq   Z
need_vsenvrC   rN   rP   r   mZexe_wrappercmdrR   argsZprompt_prefixZ	shell_envr5   promptZtmprcrd   Zabs_pather%   r%   r&   run   s   








r   )r   r   r   r   )r   r(   )r8   r9   r   r   )rA   rB   rC   r(   r   rD   )rA   rB   rR   rS   r   rT   )rf   r   rg   r-   rh   r   r   r   )rp   r   rR   rS   rq   r   r   r   )N)
rN   r9   rP   r   r   r(   r   r   r   r   )r   r   r   r   )%
__future__r   rI   r.   r$   r   r<   rL   pathlibr    r   r   r   Zmesonlibr   r	   r
   r   r   r   r   typingr   TYPE_CHECKINGZbackendsr   r,   r'   r7   r@   rO   re   ro   r   r   r   r%   r%   r%   r&   <module>   s.     







)