
    <ht                     t   S r SSKJr  SSKJr  SSKJr  SSKrSSKrSSK	r	SSK
r
SSKrSSKJr  SSKrSSKJrJrJr  SSKJr  SS	KJr  SS
KJr  SSKJr  SSKJr  \R:                  (       a  SSKrSSKJ r J!r!   " S S\ 5      r"1 Skr#1 Sk\#-  r$1 Skr%Sr&Sr' " S S\5      r(Sr)SS jr*SSS jjr+SS jr,S S jr-g)!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                      \ rS rSr% S\S'   S\S'   S\S'   S\S'   S\S'   S	\S
'   S\S'   S\S'   S\S'   S\S'   S\S'   Srg)	Arguments   z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version N)__name__
__module____qualname____firstlineno____annotations____static_attributes__r        q/mnt/mint/home/seanl/mnt/public/Repos/ladybird/Build/vcpkg/downloads/tools/meson-1.9.0-d1fcc2/mesonbuild/minit.pyr   r      s<    		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                      \ rS rSrSrSrSrg)DEFAULT_TYPES3   r   libraryr    N)r!   r"   r#   r$   EXELIBr&   r    r'   r(   rE   rE   3   s    
C
Cr'   rE   zpSample project created. To build it run the
following commands:

meson setup builddir
meson compile -C builddir
c                   [        U 5      nU R                  [        S   R                  :X  a  UR	                  5         O=U R                  [        S   R                  :X  a  UR                  5         O[        S5      e[        [        5        g)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.
rH   rI   zUnreachable codeN)	r   r   rE   valuecreate_executablecreate_libraryRuntimeErrorprintINFO_MESSAGE)options
sample_gens     r(   create_samplerS   ?   sh    
 "'*J||}U+111$$&	u-33	3!!#-..	,r'   c                J   U R                   (       d  [        5       R                  5       R                  U l         [        R
                  " SU R                   5      (       d   U(       a  [        SU R                    S35      e[        SU R                    S35        U R                  (       d*  U R                   U l        [        SU R                   S35        U R                  [        ;   a%  [        R                  " SU R                  < S35      eU(       a  g	U R                  (       d  / nS
 [        5       R                  5        5        H*  nUR                  [        ;   d  M  UR!                  U5        M,     U(       d  [        S5      eX l        [        SSR#                  S U 5       5      -   5        U R$                  (       Gdb  U R                   GH  nUR                  S:X  a
  SU l          GOUR                  S;   a	  SU l          OUR                  S:X  a	  SU l          OUR                  S:X  a	  SU l          OUR                  S:X  a	  SU l          OUR                  [&        ;   a	  SU l          OUR                  S:X  a	  SU l          OiUR                  S:X  a	  SU l          OPUR                  S:X  a	  SU l          O7UR                  S :X  a	  S!U l          OUR                  S":X  d  GM  S#U l          O   U R$                  (       d  [        S$5      e[        S%U R$                  -   5        g	g	)&zT
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  R   #    U  H  oR                  5       (       d  M  Uv   M     g 7fN)is_file).0fs     r(   	<genexpr>%autodetect_options.<locals>.<genexpr>c   s     =-!!-s   '	'zdNo recognizable source files found.
Run meson init in an empty directory to create a sample project.zDetected source files:  c              3  8   #    U  H  n[        U5      v   M     g 7frV   )r   )rX   ss     r(   rZ   r[   j   s     2L8a3q668s   r.   r9   >   r1   r6   r<   r2   r;   r3   r=   r/   r:   rC   r5   r@   r0   r?   r4   rB   r7   r>   r8   rA   z5Can't autodetect language, please specify it with -l.zDetected language: )r   r   resolvestemrematch
SystemExitrO   r   r
   r   MesonExceptionr   iterdirsuffixLANG_SUFFIXESappendjoinr   FORTRAN_SUFFIXES)rQ   sampler   rY   s       r(   autodetect_optionsrl   M   s   
 <<v~~',,xx/>>6:7<<. IC C D D~%STU$\\**++[\]33%%(89K9K8N OM 'M N 	N!#=TV^^-=Axx=(" >  ` a a#'#((2L82L*LLM!!Axx4#& xx?*#( xx5 #' xx5 #) xx4#& xx++#, xx5 #) xx4#) xx5 #+ xx7"#) xx7"#) C "D TUU#g&6&667K r'   c                   U R                  SSS[        SS9  U R                  SS[        R                  SS	9  U R                  S
SSS9  U R                  SSSS9  U R                  SSSS9  U R                  SS[	        [
        5      SS9  U R                  SSSSS9  U R                  SSSS 9  U R                  S!S"SS#S9  U R                  S$[        S%S&[         S'3S(9  U R                  S)[        S*[         3S 9  g+),zP
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actionrr   z-nz--namez0project name. default: name of current directory)rr   z-ez--executablez&executable name. default: project namez-dz--depszdependencies, comma-separatedz-lz
--languagez=project language. default: autodetected based on source files)choicesrr   z-bz--build
store_truezbuild after generation)ru   rr   z
--builddirr   zdirectory for build)defaultrr   z-fz--forcez2force overwrite of existing files and directories.z--type)r   rG   zproject type. default: z based project)rx   rv   rr   z	--versionzproject version. default: N)add_argumentr   r   RealPathActionsortedLANG_SUPPORTEDDEFAULT_PROJECTDEFAULT_VERSION)parsers    r(   add_argumentsr      sK   
 
L$  VX  Y
40G0GB  D
h-_`
n3[\
h-LM
lF>4J  RQ  R
iC[\
g<QR
iCwx
/C\e|  ~M  }N  N\  d]  ^
_E_`o_pCqrr'   c                   [        U R                  5      R                  5       (       d  [        R                  " S5        [
        R                  " U R                  5        [        S5      (       d9  [        U SS9  U R                  (       d  [        S5        SU l	        [        U 5        OP[        U 5        [        S5      R                  5       (       a  U R                  (       d  [        S5      e[        U 5        U R                   (       Ga  [        U R"                  5      R%                  5       (       a<  U R                  (       a+  [        S	5        [&        R(                  " U R"                  5        [        S
5        [*        R,                  " 5       SU R"                  /-   n[.        R0                  " U5      nUR2                  (       a  [        e[         R4                  " U R"                  5      n[6        R8                  " SUR:                  R<                  R>                  RA                  [C        S5      5      5      n[*        RD                  " U5      nU(       a+  [F        RH                  " [F        RJ                  " S5      S5        [M        5       SU R"                  /-   n[.        R0                  " U5      nUR2                  (       a  [        eg)z0
Here we generate the new Meson sample project.
zSProject source root directory not found. Run this command in source directory root.ro   T)rk   z.Defaulting to generating a C language project.r9   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 environmentrs   r   )'r   r   existssysexitoschdirr   rl   r   rO   rS   rW   r   rc   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   )rQ   cmdretb
need_vsenvvsenv_actives         r(   r   r      s    

""$$fgHHWZZ99740BC"Gg7#&&((TUU7#}}}  !((**w}}@AMM'**+m((*gw7G7G-HHnnS!>>JJw''(VVFAMM$:$:$C$C$Q$QR[\cRd$ef
++J7HHTZZ(*]^ng&6&677nnS!>>r'   )rQ   r   returnNone)F)rQ   r   rk   r   r   r   )r   z'argparse.ArgumentParser'r   r   )rQ   r   r   int).__doc__
__future__r   pathlibr   enumr   r   r   r   r   ra   r   typingr   
mesonbuildr   r   r	   mesonbuild.coredatar
   mesonbuild.environmentr   #mesonbuild.templates.mesontemplatesr   "mesonbuild.templates.samplefactoryr   mesonbuild.optionsr   TYPE_CHECKINGargparsetyping_extensionsr   r   r   rj   rg   r|   r}   r~   rE   rP   rS   rl   r   r   r    r'   r(   <module>r      s    1 "     
 	 	   , , 6 / B ? (??3H  8 _brreD C8Ns$'r'   