
    eA"                    X   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 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)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__     5/usr/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$   rA   rA   =   s        
C
CCCr#   rA   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.
    rC   rD   zUnreachable codeN)	r   r   rA   valuecreate_executablecreate_libraryRuntimeErrorprintINFO_MESSAGE)rE   
sample_gens     r$   create_samplerP   I   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>m   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 rT   )r   )rV   ss     r$   rX   z%autodetect_options.<locals>.<genexpr>t   s(      2L2La3q662L2L2L2L2L2Lr#   r*   r5   >   r-   r2   r8   r.   r7   r/   r9   r+   r6   r?   r1   r<   r,   r;   r0   r>   r3   r:   r4   r=   z5Can't autodetect language, please specify it with -l.zDetected language: )r   r   resolvestemrematch
SystemExitrM   r   r
   r   MesonExceptionr   iterdirsuffixLANG_SUFFIXESappendjoinr   FORTRAN_SUFFIXES)rE   rQ   r   rW   s       r$   autodetect_optionsrh   W   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actionrp   z-nz--namez0project name. default: name of current directory)rp   z-ez--executablez&executable name. default: project namez-dz--depszdependencies, comma-separatedz-lz
--languagez=project language. default: autodetected based on source files)choicesrp   z-bz--build
store_truezbuild after generation)rs   rp   z
--builddirr   zdirectory for build)defaultrp   z-fz--forcez2force overwrite of existing files and directories.z--type)r   rB   zproject type. default: z based project)rv   rt   rp   z	--versionzproject version. default: N)add_argumentr   r   RealPathActionsortedLANG_SUPPORTEDDEFAULT_PROJECTDEFAULT_VERSION)ri   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                            t+          j         d                              }t+          j!        |          }|r'tE          j#        tE          j$        d          d           tK                      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.rm   T)rQ   z.Defaulting to generating a C language project.r5   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 environmentrq   r   )&r   r   existssysexitoschdirr   rh   r   rM   rP   rU   r   r`   r   r   r   is_dirshutilrmtreer   get_meson_command
subprocessrun
returncodeloadTcastenvironmentcoredata
get_option	OptionKeysetup_vsenvr	   loggreenr   )rE   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$:$E$EhFXY`FaFa$b$bcc
+J77 	_HTZ((*]^^^nng&677nS!!> 	1r#   )rE   r   rF   rG   )F)rE   r   rQ   r   rF   rG   )ri   rj   rF   rG   )rE   r   rF   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   TYPE_CHECKINGargparsetyping_extensionsr   r   r   rg   rd   rz   r{   r|   rA   rN   rP   rh   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#   