
    -Pht                     d   d Z ddlmZ ddlmZ 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mZ ddlZddlmZmZmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ej        rddlZddlm Z m!Z!  G d de           Z"h dZ#h de#z  Z$h dZ%dZ&dZ' G d de          Z(dZ)d%dZ*d&d'dZ+d(d"Z,d)d$Z-dS )*z*Code that creates simple startup projects.    )annotations)Path)EnumN)glob)buildmesonlibmlog)FORBIDDEN_TARGET_NAMES)detect_ninja)create_meson_build)sample_generator)	OptionKey)ProtocolLiteralc                  ~    e Zd ZU ded<   ded<   ded<   ded<   ded<   ded	<   d
ed<   ded<   d
ed<   ded<   ded<   dS )	ArgumentszT.List[Path]srcfilesstrwdname
executabledepsz[Literal['c', 'cpp', 'cs', 'cuda', 'd', 'fortran', 'java', 'rust', 'objc', 'objcpp', 'vala']languageboolr   builddirforcez Literal['executable', 'library']typeversionN)__name__
__module____qualname____annotations__     P/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mesonbuild/minit.pyr   r      s|         						mmmm....r$   r   >   .F.f.F90.f90.for>   .c.d.m.cc.cs.cu.mm.rs.cpp.java.vala>   cdcscppcudajavaobjcrustvalaobjcppfortranr   z0.1c                      e Zd ZdZdZdS )DEFAULT_TYPESr   libraryN)r   r    r!   EXELIBr#   r$   r%   rB   rB   3   s        
C
CCCr$   rB   zpSample project created. To build it run the
following commands:

meson setup builddir
meson compile -C builddir
optionsreturnNonec                *   t          |           }| j        t          d         j        k    r|                                 n?| j        t          d         j        k    r|                                 nt          d          t          t                     dS )z
    Based on what arguments are passed we check for a match in language
    then check for project type and create new Meson samples project.
    rD   rE   zUnreachable codeN)	r   r   rB   valuecreate_executablecreate_libraryRuntimeErrorprintINFO_MESSAGE)rF   
sample_gens     r%   create_samplerQ   ?   s    
 "'**J|}U+111$$&&&&	u-3	3	3!!####-...	,r$   Fsampler   c                0   | j         svt                                                      j        | _         t	          j        d| j                   s|rt          d| j          d          t          d| j          d           | j        s$| j         | _        t          d| j         d           | j        t          v rt          j        d| j        d          |rd	S | j        sg }d
 t                                                      D             D ]%}|j        t          v r|                    |           &|st          d          || _        t          dd                    d |D                       z              | j        s| j        D ]}|j        dk    r	d| _         n|j        dv r	d| _         n|j        dk    r	d| _         n|j        dk    r	d| _         n|j        dk    r	d| _         n||j        t&          v r	d| _         ne|j        dk    r	d| _         nQ|j        dk    r	d| _         n=|j        dk    r	d| _         n)|j        d k    r	d!| _         n|j        d"k    r	d#| _         n| j        st          d$          t          d%| j        z              d	S d	S )&z`
    Here we autodetect options for args not passed in so don't have to
    think about it.
    z[a-zA-Z_][a-zA-Z0-9]*zName of current directory "zM" is not usable as a sample project name.
Specify a project name with --name.zUsing "z." (name of current directory) as project name.z0" (project name) as name of executable to build.zExecutable name zI is reserved for Meson internal use. Refusing to init an invalid project.Nc              3  B   K   | ]}|                                 |V  d S N)is_file).0fs     r%   	<genexpr>z%autodetect_options.<locals>.<genexpr>c   s/      ===!======r$   zdNo recognizable source files found.
Run meson init in an empty directory to create a sample project.zDetected source files:  c              3  4   K   | ]}t          |          V  d S rU   )r   )rW   ss     r%   rY   z%autodetect_options.<locals>.<genexpr>j   s(      2L2La3q662L2L2L2L2L2Lr$   r+   r6   >   r.   r3   r9   r/   r8   r0   r:   r,   r7   r@   r2   r=   r-   r<   r1   r?   r4   r;   r5   r>   z5Can't autodetect language, please specify it with -l.zDetected language: )r   r   resolvestemrematch
SystemExitrN   r   r
   r   MesonExceptionr   iterdirsuffixLANG_SUFFIXESappendjoinr   FORTRAN_SUFFIXES)rF   rR   r   rX   s       r%   autodetect_optionsri   M   sU   
 < Vvv~~'',x/>> 	D6 	D C7< C C C D D DTTTTUUU ^$\\*\\\]]]333% 'M9K 'M 'M 'M N N 	N  	N!#==TVV^^--=== 	# 	#Ax=((""" 	a ` a a a#'#((2L2L82L2L2L*L*LLMMM %8! !	 !	Ax4#& x?**#( x5  #' x5  #) x4#& x+++#, x5  #) x4#) x5  #+ x7""#) x7""#)  #  	VTUUU#g&6677777K%8 %8r$   parser'argparse.ArgumentParser'c                   |                      dddt          d           |                      ddt          j        d	           |                      d
dd           |                      ddd           |                      ddd           |                      ddt	          t
                    d           |                      dddd           |                      ddd            |                      d!d"dd#           |                      d$t          d%d&t           d'(           |                      d)t          d*t                       d+S ),z\
    Here we add args for that the user can passed when making a new
    Meson project.
    r   
sourcefile*z@source files. default: all recognized files in current directory)metavarnargsr   help-Cr   z#directory to cd into before running)destactionrq   z-nz--namez0project name. default: name of current directory)rq   z-ez--executablez&executable name. default: project namez-dz--depszdependencies, comma-separatedz-lz
--languagez=project language. default: autodetected based on source files)choicesrq   z-bz--build
store_truezbuild after generation)rt   rq   z
--builddirr   zdirectory for build)defaultrq   z-fz--forcez2force overwrite of existing files and directories.z--type)r   rC   zproject type. default: z based project)rw   ru   rq   z	--versionzproject version. default: N)add_argumentr   r   RealPathActionsortedLANG_SUPPORTEDDEFAULT_PROJECTDEFAULT_VERSION)rj   s    r%   add_argumentsr~      s   
 
L$  VX  Y  Y  Y
40GB  D D D
h-_```
n3[\\\
h-LMMM
lF>4J4J  RQ  R  R  R
iC[\\\
g<QRRR
iCwxxx
/C\  d]  ~M  d]  d]  d]  ^  ^  ^
_Cq`oCqCqrrrrrr$   intc                   t          | j                                                  st          j        d           t          j        | j                   t          d          s>t          | d           | j	        st          d           d| _	        t          |            nUt          |            t          d                                          r| j        st          d          t          |            | j        rwt          | j                                                  r/| j        r(t          d	           t'          j        | j                   t          d
           t+          j                    d| j        gz   }t/          j        |          }|j        rt          t!          j        | j                  }t7          j        d|j        j        j                             tC          d                              }t+          j"        |          }|r'tG          j$        tG          j%        d          d           tM                      d| j        gz   }t/          j        |          }|j        rt          dS )z8
    Here we generate the new Meson sample project.
    zSProject source root directory not found. Run this command in source directory root.rn   T)rR   z.Defaulting to generating a C language project.r6   zmeson.buildz5meson.build already exists. Use --force to overwrite.z,Build directory already exists, deleting it.zBuilding...setupr   vsenvzINFO:z1automatically activated MSVC compiler environmentrr   r   )'r   r   existssysexitoschdirr   ri   r   rN   rQ   rV   r   ra   r   r   r   is_dirshutilrmtreer   get_meson_command
subprocessrun
returncodeloadTcastenvironmentcoredataoptstoreget_value_forr   setup_vsenvr	   loggreenr   )rF   cmdretb
need_vsenvvsenv_actives         r%   r   r      s;    
""$$ hfgggHWZ99 
$740000 	#BCCC"Gg7###&&(( 	V 	VTUUU7###}  !!((** 	,w} 	,@AAAM'*+++m(**gw7G-HHnS!!> 	Jw'((VFAM$:$C$Q$QR[\cRdRd$e$eff
+J77 	_HTZ((*]^^^nng&677nS!!> 	1r$   )rF   r   rG   rH   )F)rF   r   rR   r   rG   rH   )rj   rk   rG   rH   )rF   r   rG   r   ).__doc__
__future__r   pathlibr   enumr   r   r   r   r   r_   r   typingr   
mesonbuildr   r   r	   mesonbuild.coredatar
   mesonbuild.environmentr   #mesonbuild.templates.mesontemplatesr   "mesonbuild.templates.samplefactoryr   mesonbuild.optionsr   TYPE_CHECKINGargparsetyping_extensionsr   r   r   rh   re   r{   r|   r}   rB   rO   rQ   ri   r~   r   r#   r$   r%   <module>r      s,   1 0 " " " " " "                  



 				 				           , , , , , , , , , , 6 6 6 6 6 6 / / / / / / B B B B B B ? ? ? ? ? ? ( ( ( ( ( (? OOO33333333    H    877 ___brreee    D      C8 C8 C8 C8 C8Ns s s s$' ' ' ' ' 'r$   