
    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j        rddlmZ d	d
hZd2dZd3dZd4dZd5dZd6dZ d7d#Z!d8d&Z"d9d:d-Z#d;d1Z$dS )<    )annotationsN)Path   )buildminstall)EnvironmentVariablesMesonException
is_windowssetup_vsenv	OptionKeyget_wine_shortpathMachineChoice)mlog)InstallDatazpwsh.exezpowershell.exeparserargparse.ArgumentParserreturnNonec                0   |                      ddt          dd           |                      ddt          d d	           |                      d
ddd           |                      ddg dd           |                      dt          j        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   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)r   s    7/usr/lib/python3.11/site-packages/mesonbuild/mdevenv.pyadd_argumentsr*      s    
:D#6  8 8 8
Tdc  e e e
4I  J J J  : : :D  F F F (:Ic  e e e e e    T.Optional[str]c            	     6   t          t                    j        } | dz  dz  }t          D ]o}	 |ddddt	          |          g}t          j        |          }|                                                                c S # t
          j	        t          f$ r Y lw xY wd S )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^S^_G,W55F==??((*****-w7 	 	 	D	4s   AA==BBenvT.Dict[str, str]c                   |                      d          }|sd S t          j        d          pt          j        d          }|sd S t          |g|                    d                    | d<   t          j        d           d S )NWINEPATHwine64wine;z4Meson detected wine and has set WINEPATH accordingly)getshutilwhichr   splitr   log)r?   winepathwinecmds      r)   reduce_winepathrM   1   s    wwz""H l8$$<V(<(<G ('HNN34G4GHHC
OHCDDDDDr+   bbuild.Builddump_fmt%T.Tuple[T.Dict[str, str], T.Set[str]]c                >   t                      }|                    ddg           |                    d| j        g           | j        j        t
          j                                                 }|r|                    d|g           |ri nt          j	        
                                }|dv rdnd }t                      }t          j        | j        |h          D ]/}|                    ||          }||                                z  }0t!          |           ||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_namesrM   )rN   rP   	extra_envsysrootr?   default_fmtvarnamesis           r)   rc   rc   ;   s   $&&IMM.3%(((MM&(8999m&}'9:GGIIG 3&	222
/""bjoo//C$(888&&dKuuH_QX	{33 " "ii[))AKKMM!C=r+   install_data'InstallData'T.List[str]c                   ddl m} g } |d| j        dddd          }|                                r=| j        j                            t          d                    }t          |t                    s
J d	            | j        j                            t          d
                    }t          |t                    s
J d	            t          j
                            ||          }|                    dd
|ff          }t          |t                    s
J d	            t          |          }	|j        D ]7}
|	t          |
j                  j        v r|                    |
j
                   8|S )Nr   )PkgConfigDependencyzbash-completionFTz>=2.10)requiredsilentversionprefixzfor mypydatadircompletionsdir)	pkgconfigpkgconfig_define)dependencies.pkgconfigrn   rY   foundcoredata
get_optionr   
isinstancer3   r]   pathjoinget_variabler   datainstall_pathparentsappend)rN   rj   rn   r=   deprr   rs   datadir_absrt   completionsdir_pathfs              r)   bash_completion_filesr   O   su   ;;;;;;F

/+0DXVVX XC
yy{{ &'229X3F3FGG&#&&22
222-(33Ii4H4HII'3''33333gll6733))4DYbdoXpWr)ss.#..::
:::">22" 	& 	&A"d1>&:&:&BBBaf%%%Mr+   autoload_pathr   
gdb_helperr3   fnamec           	        | |j         z  }|                    dd           	 t                      rDt          j        |t          |t          j                            |          z                       d S t          j	        |t          |t          j                            |          z                       d S # t          t          j        f$ r Y d S w xY w)NT)r   exist_ok)r1   mkdirr
   rG   r_   r3   r]   r|   basenamesymlinkFileExistsErrorSameFileError)r   r   r   destdirs       r)   add_gdb_auto_loadr   b   s    el*GMM$M...<< 	PK
C"'2B2B:2N2N(N$O$OPPPPPJz3w1A1A*1M1M'M#N#NOOOOOV12   s   AB9 5AB9 9CC
privatedirworkdirc           	        t          j        d          sd S | j        }| dz  }t          |g|j        dd          R  }d}|j        D ]}|j                            d          s4|j                            d          s|j                            d          rtt          |j                  j        	                    dd          d	         }|j
        D ]9}	t          |	j                  }
|
j        |k    rt          ||j        |
           d
}:|rd| d}|dz  }d}	 |                    dd          5 }||                                vr|                    |           d
}d d d            n# 1 swxY w Y   n)# t           $ r |                    |d           d
}Y nw xY w|r'|                                }|                                }|                    |          }t)          j        dt)          j        t/          |                               t)          j        d           t)          j        dt)          j        d|j                   dt)          j        d                     |j        |k    rVt)          j        dt)          j        t/          |j                            dt)          j        d|                      d S d S d S d S )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 )rG   rH   r1   r   partsr   r|   endswithnamersplittargetsr   r   open	readlineswriteFileNotFoundError
write_textresolverelative_tor   rJ   boldr3   )r   rj   r   bdirautoload_basedirr   have_gdb_helpersdlibnametr|   gdbinit_linegdbinit_path
first_timer   workdir_pathrel_paths                    r)   write_gdb_scriptr   n   sL   < D!O3);DJqrrN;;;M 	, 	,6??9%% 	,)D)D 	,XbHcHc 	, 16ll'..sA66q9G!) , ,AG}}9''%mQVTBBB'+$ LN:JNNNj(
	""4'":: &aq{{}}44GGL)))!%J& & & & & & & & & & & & & & & ! 	 	 	##L7#CCCJJJ	  
	L'//11L"??,,L#//==HHEtyQTU]Q^Q^G_G_```HBCCCHXty)YLDW)Y)YZZ49\224 4 4"l2273xCWCW9X9X!49-Ix-I-I#J#JL L L L L+L L
	L 
	L 32s6   E9 3.E-!E9 -E11E9 4E15E9 9#FFrb   rh   
T.Set[str]dump_formatoutputT.Optional[T.TextIO]c                ~    |D ]9}t          | d| |          d|           |dk    rt          d| |           :d S )Nz="")filer   zexport )print)rb   rh   r   r   r   s        r)   dumpr      sk     1 1(((((v6666("""D""00001 1r+   optionsargparse.Namespaceintc                $	   t          | j                  dz  }|dz  }|                                st          d| j        d          t	          j        | j                  }| j        p| j        }t          j        d|j	        j
                            t          d                              }t          |           | j        r| j        nd }t!          ||          \  }}| j        rt| j        rt          d          | j        du rt          |||           nAt%          | j        d	d
          5 }	t          ||||	           d d d            n# 1 swxY w Y   dS |j	                                        r`d}
|j	                                        }|r/d                    |                                          }|
d| z  }
t/          j        |
           t3          j        t7          |dz                      }t9          |||           | j        }|sd|j         d}t<          j                             d          }|r#t<          j!        "                    |          r|g}ntG                      rmtI                      }|st/          j%        d           |tL          v r|ddg}d| d}|d|gz  }nkt<          j                             dd          g}|dd| dgz  }n>t<          j                             dt<          j!        '                    d                    g}d |d         v rtQ          j)        d	!          }|*                    d"           t<          j                             d#          s|*                    d$| d%           tW          ||          D ]}|*                    d&| d'           |,                                 |-                    d(           |-                    |j.                   n=t_          j0        |d         |                     d)d           *          }|p|d         |d<   	 tc          j2        |d+||,          S # tb          j3        $ r}|j4        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)r|   F)	close_fdsr?   cwdzCommand not found: )6r   r   is_filer	   r   loadr   TcastrY   ry   rz   r   r   r   r   rc   r#   r   need_exe_wrapperget_exe_wrapperr}   get_commandr   rJ   r   load_install_datar3   r   rX   r]   r^   rF   r|   existsr
   r>   warningr2   realpathtempfileNamedTemporaryFiler   r   flushr   r   rG   rH   r4   callr8   
returncoder   )r   r   	buildfilerN   r   
need_vsenvrP   rb   rh   r   mexe_wrappercmdrj   argsprompt_prefix	shell_envr<   prompttmprcr   abs_pathes                          r)   runr      s   g&''/9J[(I mk'*:kkklll
7#$$Ao1!1G 6 A A)GBTBT U UVVJ
&-l<w""Hq(++FH| > 	X !VWWW<48,,,,glC'::: 9fVXx8889 9 9 9 9 9 9 9 9 9 9 9 9 9 9q}%%'' 5m3355 	((;224455CcOA-c*}2L.M.MNNLZw777>D !&-AN---JNN7++	 	J	22 	J;DD\\ 	J%''E WUVVV''y)4\\\\V,,
y2PQQR====>>JNN7BG,<,<Y,G,GHHIDT!W/S999EKK;<<<:>>">?? DB=BBBCCC*1l;; * *L!LLL))))KKMMMKK
###KK
### <Qfjj.F.FGGG%d1gQ>tu#)#*, , , 	, (   | > > ><47<<===>s0   0EEE6Q RQ)#R)&R)r   r   r   r   )r   r,   )r?   r@   r   r   )rN   rO   rP   r,   r   rQ   )rN   rO   rj   rk   r   rl   )r   r   r   r3   r   r   r   r   )r   r   rj   rk   r   r   r   r   )N)
rb   r@   rh   r   r   r,   r   r   r   r   )r   r   r   r   )%
__future__r   r]   r4   r'   r   rG   r`   pathlibr    r   r   mesonlibr   r	   r
   r   r   r   r   r   typingr   TYPE_CHECKINGbackendsr   r2   r*   r>   rM   rc   r   r   r   r   r    r+   r)   <module>r      s   " " " " " "                             : : : : : : : : : : : : : : : : : :          ? &%%%%%%/0e e e e
 
 
 
E E E E   (   &
 
 
 
'L 'L 'L 'LR1 1 1 1 1L> L> L> L> L> L>r+   