
    e(                    
   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 ddlmZmZmZmZmZmZmZ ddl
mZ d dlZej0                  rddlmZ d	d
hZddZddZddZddZddZ ddZ!ddZ"dddZ#ddZ$y)    )annotationsN)Path   )buildminstall)EnvironmentVariablesMesonException
is_windowssetup_vsenv	OptionKeyget_wine_shortpathMachineChoice)mlog)InstallDatazpwsh.exezpowershell.exec                
   | j                  ddt        dd       | j                  ddt        d d	       | j                  d
ddd       | j                  ddg dd       | j                  dt        j                  dd       y )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   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   argparse	REMAINDER)parsers    4/usr/lib/python3/dist-packages/mesonbuild/mdevenv.pyadd_argumentsr'      s    
:D#6  8
Tdc  e
4I  J  :D  F (:(:Ic  e    c            	     &   t        t              j                  } | dz  dz  }t        D ]H  }	 |ddddt	        |      g}t        j                  |      }|j                         j                         c S  y # t
        j                  t        f$ r Y gw xY w)Nscriptszcmd_or_ps.ps1z
-noprofilez-executionpolicybypassz-file)r   __file__parentPOWERSHELL_EXESstr
subprocesscheck_outputdecodestripCalledProcessErrorOSError)
mesonbuildscriptshellr    results        r&   get_windows_shellr:   %   s    h&&J)#o5F  	l,>'SVW]S^_G,,W5F==?((**	  --w7 		s   AA44BBc                    | j                  d      }|sy t        j                  d      xs t        j                  d      }|sy t        |g|j	                  d            | d<   t        j                  d       y )NWINEPATHwine64wine;z4Meson detected wine and has set WINEPATH accordingly)getshutilwhichr   splitr   log)envwinepathwinecmds      r&   reduce_winepathrH   1   s`    wwz"Hll8$<V(<G('HNN34GHC
OHHCDr(   c                &   t               }|j                  ddg       |j                  d| j                  g       | j                  j                  t
        j                     j                         }|r|j                  d|g       |ri nt        j                  j                         }|dv rdnd }t               }t        j                  | j                  |h      D ]'  }|j                  ||      }||j                         z  }) t!        |       ||fS )NMESON_DEVENV1MESON_PROJECT_NAMEQEMU_LD_PREFIX>   r   r   z${0})r   setproject_nameenvironment
propertiesr   HOSTget_sys_rootosenvironcopy	itertoolschaindevenvget_env	get_namesrH   )bdump_fmt	extra_envsysrootrE   default_fmtvarnamesis           r&   rZ   rZ   ;   s    $&IMM.3%(MM&(89mm&&}'9'9:GGIG&	2"bjjoo/C$(88&dKuH__QXX	{3 "ii[)AKKM!" C=r(   c                   ddl m} g } |d| j                  dddd      }|j                         r0| j                  j                  j                  t        d            }t        |t              sJ d	       | j                  j                  j                  t        d
            }t        |t              sJ d	       t        j                  j                  ||      }|j                  dd
|ff      }t        |t              sJ d	       t        |      }	|j                  D ]?  }
|	t        |
j                        j                   v s%|j#                  |
j                         A |S )Nr   )PkgConfigDependencyzbash-completionFTz>=2.10)requiredsilentversionprefixzfor mypydatadircompletionsdir)	pkgconfigpkgconfig_define)dependencies.pkgconfigrd   rP   foundcoredata
get_optionr   
isinstancer/   rT   pathjoinget_variabler   datainstall_pathparentsappend)r\   install_datard   r9   deprh   ri   datadir_absrj   completionsdir_pathfs              r&   bash_completion_filesr~   O   s0   ;F
/+0DXVXC
yy{''229X3FG&#&2
2&--((33Ii4HI'3'33'ggll673))4DYbdoXpWr)s.#.:
:.">2"" 	&A"d1>>&:&B&BBaff%	& Mr(   c           	        | |j                   z  }|j                  dd       	 t               r@t        j                  |t        |t        j                  j                  |      z               y t        j                  |t        |t        j                  j                  |      z               y # t        t        j                  f$ r Y y w xY w)NT)rw   exist_ok)r-   mkdirr
   rA   rV   r/   rT   rr   basenamesymlinkFileExistsErrorSameFileError)autoload_path
gdb_helperfnamedestdirs       r&   add_gdb_auto_loadr   b   s    ell*GMM$M.<KK
C"''2B2B:2N(N$OPJJz3w1A1A*1M'M#NOV112 s   A	B. .?B. .C
	C
c           	        t        j                  d      sy | j                  }| dz  }t        |g|j                  dd   }d}|j
                  D ]  }|j                  j                  d      s7|j                  j                  d      s|j                  j                  d      sUt        |j                        j                  j                  dd      d	   }|j                  D ]@  }	t        |	j                        }
|
j                  |k(  s(t        ||j                  |
       d
}B  |r{d| d}|dz  }d}	 |j                  dd      5 }||j                         vr|j                  |       d
}d d d        |r(|j%                         }|j%                         }|j'                  |      }t)        j*                  dt)        j,                  t/        |                   t)        j*                  d       t)        j*                  dt)        j,                  d|j                         dt)        j,                  d             |j                  |k7  rUt)        j*                  dt)        j,                  t/        |j                              dt)        j,                  d|              y y y y # 1 sw Y   7xY w# t         $ r |j#                  |d       d
}Y [w xY w)N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 )rA   rB   r-   r   partsru   rr   endswithnamersplittargetsr   r   open	readlineswriteFileNotFoundError
write_textresolverelative_tor   rD   boldr/   )
privatedirry   workdirbdirautoload_basedirr   have_gdb_helpersdlibnametrr   gdbinit_linegdbinit_path
first_timer}   workdir_pathrel_paths                    r&   write_gdb_scriptr   n   sw   <<D!O3);DJJqrN;M 	,66??9%)DXbHc 166l''..sA6q9G!)) ,AGG}99'%mQVVTB'+$	,	, 9:J9K2Nj(
	""4'": &aq{{}4GGL)!%J& '//1L"??,L#//=HHHEtyyQTU]Q^G_`HHBCHHXtyy+CLDWDWCX)YZ499\24""l273xCW9X!499xj-I#JL 3  
& & ! 	##L7#CJ	s*   8J3 &J&1J3 &J0+J3 3KKc                j    |D ].  }t        | d| |    d|       |dk(  st        d| |       0 y )Nz="")filer   zexport )print)rY   ra   dump_formatoutputr   s        r&   dumpr      sE     1ba(v6("GD6"01r(   c                	   t        | j                        dz  }|dz  }|j                         st        d| j                  d      t	        j
                  | j                        }| j                  xs | j                  }t        j                  d|j                  j                  j                  t        d                  }t        |       | j                  r| j                  nd }t!        ||      \  }}| j                  rc| j"                  rt        d      | j                  du rt        |||       yt%        | j                  d	d
      5 }	t        ||||	       d d d        y|j                  j'                         rZd}
|j                  j)                         }|r'dj+                  |j-                               }|
d| z  }
t/        j0                  |
       t3        j4                  t7        |dz              }t9        |||       | j"                  }|sd|j:                   d}t<        j>                  jA                  d      }|r#t<        jB                  jE                  |      r|g}ntG               ritI               }|st/        jJ                  d       |tL        v r|ddg}d| d}|d|gz  }nkt<        j>                  jA                  dd      g}|dd| dgz  }n>t<        j>                  jA                  dt<        jB                  jO                  d            g}d |d   v rtQ        jR                  d	!      }|jU                  d"       t<        j>                  jA                  d#      s|jU                  d$| d%       tW        ||      D ]  }|jU                  d&| d'        |jY                          |j[                  d(       |j[                  |j\                         n6t_        j`                  |d   |jA                  d)d       *      }|xs |d   |d<   	 tc        jd                  |d+||,      S # 1 sw Y   yxY w# tb        jf                  $ r}|jh                  cY d }~S d }~wtj        $ r t        d-|d          w xY w).Nzmeson-privatez	build.datz
Directory z- does not seem to be a Meson build directory.boolvsenvz3--dump option does not allow running other command.Twr   r   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-CommandCOMSPECzC:\WINDOWS\system32\cmd.exez/kzprompt z $P$Gz/bin/shbash)modez [ -e ~/.bashrc ] && . ~/.bashrc
MESON_DISABLE_PS1_OVERRIDEzexport PS1="z $PS1"
z. "z"
z--rcfilePATH)rr   F)	close_fdsrE   cwdzCommand not found: )6r   r   is_filer	   r   loadr   TcastrP   ro   rp   r   r   r   r   rZ   r   r   need_exe_wrapperget_exe_wrapperrs   get_commandr   rD   r   load_install_datar/   r   rO   rT   rU   r@   rr   existsr
   r:   warningr.   realpathtempfileNamedTemporaryFiler   r~   flushrx   r   rA   rB   r0   callr4   
returncoder   )optionsr   	buildfiler\   r   
need_vsenvr]   rY   ra   r   mexe_wrappercmdry   argsprompt_prefix	shell_envr8   prompttmprcr}   abs_pathes                          r&   runr      s   g&&'/9J[(Iz'*:*:)==jkll

7##$Aoo1!1!1G 6 6 A A)GBT UVJ
&-llw""Hq(+FH||>> !VWW<<48,  gllC': 9fVXx89}}%%'5mm335((;2245C2cUOA--c*}2L.MNLZw7>>DANN+1-JJNN7+		2;D\%'EUV'y)47F[\V,,

y2PQRu=>>JJNN7BGG,<,<Y,GHIDT!W//S9EKK;<::>>">?l=/BC*1l; *c!CL)*KKMKK
#KK

# <<Qfjj.FG%d1gQ>tu#)#*, 	,i9j (( || >247)<==>s*   P0P< 0P9<Q>Q Q> Q>)r%   zargparse.ArgumentParserreturnNone)r   T.Optional[str])rE   T.Dict[str, str]r   r   )r\   build.Buildr]   r   r   z%T.Tuple[T.Dict[str, str], T.Set[str]])r\   r   ry   'InstallData'r   zT.List[str])r   r   r   r/   r   r   r   r   )r   r   ry   r   r   r   r   r   )N)
rY   r   ra   z
T.Set[str]r   r   r   zT.Optional[T.TextIO]r   r   )r   zargparse.Namespacer   int)%
__future__r   rT   r0   r#   r   rA   rW   pathlibr    r   r   mesonlibr   r	   r
   r   r   r   r   r   typingr   TYPE_CHECKINGbackendsr   r.   r'   r:   rH   rZ   r~   r   r   r   r    r(   r&   <module>r      sy    "       : : :  ??%/0e
E(&
'LR1L>r(   