
    <hG                       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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Jr  S SKJr  S SKJrJr  S SKJrJrJrJr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&J'r'J(r(  SSK)J*r*  \RV                  (       a  SSK,J-r-  SSK.J/r/  / SQr0SSSSS.r1S'S jr!S(S jr2Sr3S)S jr4S*S jr5S*S jr6\ " S S\Rn                  S95       r8 " S S\85      r9 " S  S!\85      r:S+S" jr;S,S# jr<S-S$ jr=S.S% jr>S/S& jr?g)0    )annotationsN)	dataclass)glob)Path)Environmentdetect_ninja)GITMesonExceptionRealPathActionget_meson_command	quiet_gitwindows_proof_rmtreesetup_vsenv   )	OptionKey)add_arguments)wrap)mlogbuildcoredata)run_exe)ImmutableListProtocol)ExecutableSerialisation)bztargztarxztarzipz.tar.bz2z.tar.gzz.tar.xz.zipc                    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SS9  U R                  SSSS9  g )N-Cwdz#directory to cd into before running)destactionhelpz--allow-dirty
store_truez8Allow even when repository contains uncommitted changes.)r#   r$   z	--formatsr   zaComma separated list of archive types to create. Supports xztar (default), bztar, gztar, and zip.)defaultr$   z--include-subprojectszEInclude source code of subprojects that have been used for the build.z
--no-testsz)Do not build and test generated packages.)add_argumentr   )parsers    q/mnt/mint/home/seanl/mnt/public/Repos/ladybird/Build/vcpkg/downloads/tools/meson-1.9.0-d1fcc2/mesonbuild/mdist.pyr   r   -   s    
4B  D
W  Y
W A  B
/d  f
\H  J    c           	     l   U S-   n[         R                  " 5       nUR                  [        U S5      R	                  5       5        [        USSS9 nUR                  SR                  UR                  5       [        R                  R                  U 5      5      5        S S S 5        g ! , (       d  f       g = f)Nz
.sha256sumrbwzutf-8)encodingz{} *{}
)hashlibsha256updateopenreadwriteformat	hexdigestospathbasename)fnamehashnamemfs       r)   create_hashr>   :   s~    |#HAHHT%##%&	hg	.! 	

!!!++-1A1A%1HIJ 
/	.	.s   AB%%
B3zPRepository has uncommitted changes that will not be included in the dist tarballc                    U(       a  [         R                  " U 5        g [         R                  " U S-   S-   5        [        R                  " S5        g )N
z:Use --allow-dirty to ignore the warning and proceed anywayr   )r   warningerrorsysexit)msgallow_dirtys     r)   handle_dirty_optrG   F   s2    S

3: \\]r*   c                   [        / SQU 5      S   (       a  g[        R                  R                  [        R                  R	                  U S5      5      (       ag  Sn[
        (       d  US-  nS[        R                  ;   a  US-  nO%US	-  n[        S
/U 5      u  p#SU;   a  US-  nOUS-  n[        R                  " U5        g)z
Checks if meson.build file at the root source directory is tracked by git.
It could be a subproject part of the parent project git repository.
)zls-filesz--error-unmatchzmeson.buildr   Tz.gitz-Source tree looks like it may be a git repo, zbut git is not installed!	GITLAB_CIz This is a gitlab bug.zbut git returned a failure. statuszdubious ownershipzPThis is a bug in git itself, please set `git config --global safe.directory "*"`z/meson.build may not have been committed to git?F)	r   r7   r8   existsjoinr	   environr   rA   )src_rootrE   poes       r)   is_gitrQ   M   s    
 ?J1M	ww~~bggll8V455=s..Cbjj(//11Cxj(3EA"b( iiHHSr*   c                |    [         R                  R                  [         R                  R                  U S5      5      $ )Nz.hg)r7   r8   isdirrL   )rN   s    r)   is_hgrT   q   s$    77==h677r*   c                      \ rS rSr% S\S'   S\S'   S\S'   S\S'   S\S	'   S
\S'   SS jr\R                  SS j5       rSS jr	Sr
g)Distu   str	dist_namerN   bld_rootzT.List[ExecutableSerialisation]dist_scriptszT.Dict[str, str]subprojectsargparse.Namespaceoptionsc                    [         R                  R                  U R                  S5      U l        [         R                  R                  U R                  U R
                  5      U l        g )Nz
meson-dist)r7   r8   rL   rZ   dist_subrY   distdir)selfs    r)   __post_init__Dist.__post_init__~   s:    T]]LAww||DMM4>>Br*   c                    g N )rb   archivess     r)   create_distDist.create_dist   s    r*   c                   [         R                  R                  U R                  5      (       d   e[        R
                  " 5       S/-   nU R                  U R                  U R                  SR                  S U 5       5      S.nU R                   GH3  nUR                  (       a  UR                  U R                  ;  a  M1  U R                  R                  UR                  S5      n[         R                  R                  U R                  U5      US'   [         R                  R                  U R                  U5      US'   [         R                  R                  U R                  U5      US'   SR                  UR                  5      n[        S	U< 35         [        X25      nUS
:w  a  [         R"                  " S5        GM3  GM6     g ! [$         a*    [        SU< 35        [         R"                  " S5         GMl  f = f)Nrewrite c              3  N   #    U  H  n[         R                  " U5      v   M     g 7frf   )shlexquote).0xs     r)   	<genexpr>(Dist.run_dist_scripts.<locals>.<genexpr>   s     'M1As   #%)MESON_DIST_ROOTMESON_SOURCE_ROOTMESON_BUILD_ROOTMESONREWRITE MESON_PROJECT_DIST_ROOTMESON_PROJECT_SOURCE_ROOTMESON_PROJECT_BUILD_ROOTzRunning custom dist script r   zDist script errored outzFailed to run dist script r   )r7   r8   isabsra   r   get_build_commandrN   rZ   rL   r[   
subprojectr\   getcmd_argsprintr   rC   rD   OSError)rb   mesonrewriteenvdsubdirnamercs          r)   run_dist_scriptsDist.run_dist_scripts   s|   ww}}T\\****"446)D"&,,$(MM#'=="xx'M'MM
 ""A||D4D4D D%%))!,,;F-/WW\\$,,-OC)*/1ww||DMM6/RC+,.0ggll4==&.QC*+88AJJ'D/x89Q_7HH67  #  24(;<s   'G

/G>=G>)r`   ra   N)returnNonerh   T.List[str]r   r   )__name__
__module____qualname____firstlineno____annotations__rc   abcabstractmethodri   r   __static_attributes__rg   r*   r)   rV   rV   u   sH    NMM11!!C 	 r*   rV   )	metaclassc                  b    \ rS rSrS
S jrSS jr  S     SS jjrSS jrSS jrSS jr	S	r
g)GitDist   c                    [        SS/USS9S   R                  5       nU(       d  [        U5      $ [        [        U5      R                  5      n[        U5      R                  US-
     $ )Nz	rev-parsez--show-prefixT)checkr   )r   stripr   lenparents)rb   dir_prefixprefix_levels       r)   git_rootGitDist.git_root   s`     K94tLQOUUW:4<//0Dz!!,"233r*   c                    [         R                  " SSU R                  SSS/5        [         R                  " SSU R                  SSS/5      nUS	:H  $ )
z2Check whether there are uncommitted changes in gitgitr    zupdate-indexz-qz	--refreshz
diff-indexz--quietHEADr   )
subprocesscallrN   )rb   rets     r)   have_dirty_indexGitDist.have_dirty_index   sJ     	dmm^T;WXooudDMM<TZ[\axr*   Nc                `   SSSSU/nUb  UR                  SSU S35        Ub  UR                  SU/5        [        R                  " 5        n[        R
                  " XaUS	9  UR                  S
5        [        R                  " US9nUR                  US9  S S S 5        g ! , (       d  f       g = f)Nr   archivez--formattar   z	--prefix=/z--)cwdstdoutr   )fileobj)r8   )
insertextendtempfileTemporaryFiler   
check_callseektarfiler2   
extractall)	rb   srcra   revisionr   r   cmdr=   ts	            r)   copy_gitGitDist.copy_git   s    iUH=JJqIfXQ/0JJf~&##%!!#q9FF1IQ'ALLgL&	 &%%s   A
B
B-c                   U R                  5       (       a$  [        [        U R                  R                  5        [
        R                  R                  U5      (       a  [        U5        U R                  U5      nUR                  U5      (       a(  [
        R                  " U5        U R                  X5        O[        U5      R                  U5      nUS-   n[
        R                  R                  U5      (       a  [        U5        [
        R                  " U5        U R                  X5[        U5      S9  [        XT5      R!                  U5        [        U5        U R#                  X5        g )Nz-tmp)r   )r   rG   msg_uncommitted_changesr^   rF   r7   r8   rK   r   r   samefilemakedirsr   r   relative_torX   renameprocess_submodules)rb   rN   ra   	repo_rootr   tmp_distdirs         r)   process_git_projectGitDist.process_git_project   s      ""4dll6N6NO77>>'"" )MM(+	h''KK MM(,(^//	:F!F*Kww~~k**$[1KK$MM)VME%,,W5 -2r*   c                H   [         R                  R                  US5      n[         R                  R                  U5      (       d  g / SQn[        R
                  " XASS9R                  5       nU H  nUS S nUSS  R                  SS5      u  pU	R                  SS5      S   n
US:X  a  [        R                  " S	U
< S
35        MW  US;   a%  [        S	U
< S3U R                  R                  5        U R                  [         R                  R                  X5      X(U
S9  M     g )Nz.gitmodules)r   	submodulerJ   z--cachedz--recursiveT)r   universal_newlinesr   rm   r   -z
Submodule z3 is not checked out and cannot be added to the dist>   +UzF has uncommitted changes that will not be included in the dist tarball)r   r   )r7   r8   rL   rK   r   check_output
splitlinessplitrsplitr   rA   rG   r^   rF   r   )rb   r   ra   module_filer   modlistr   rJ   sha1restsubpaths              r)   r   GitDist.process_submodules   s   ggll36ww~~k**G))#4P[[] Ir]F"12,,S!4JDkk#q)!,G}z'4ghi:% :g[8~!  BF  BN  BN  BZ  BZ  [MM"'',,s4gU\M] !r*   c                   U R                  U R                  U R                  5        U R                  R	                  5        H  n[
        R                  R                  U R                  U5      n[
        R                  R                  U R                  U5      n[
        R                  R                  U5      (       a  M}  [        U5      (       a  U R                  X45        M  [        R                  " X45        M     U R                  5         / nU H^  nU R                  [        U   -   n[        R                  " U R                  X`R                  U R                   S9  UR#                  U5        M`     [%        U R                  5        U$ )N)root_dirbase_dir)r   rN   ra   r\   valuesr7   r8   rL   rK   rQ   shutilcopytreer   archive_extensionmake_archiver`   rY   appendr   )rb   rh   r8   sub_src_rootsub_distdiroutput_namesacompressed_names           r)   ri   GitDist.create_dist   s     =$$++-D77<<t<L'',,t||T:Kww~~k**l##((C: . 	A"ll->q-AAOa--RVR`R`a0  	T\\*r*   rg   )r   rX   r   r   r   bool)r   NN)r   zT.Union[str, os.PathLike]ra   rX   r   rX   r   T.Optional[str]r   r   r   r   )rN   rX   ra   rX   r   r   )r   rX   ra   rX   r   r   r   )r   r   r   r   r   r   r   r   r   ri   r   rg   r*   r)   r   r      sC    4 V\KO'('9H'TX'3(^&r*   r   c                  (    \ rS rSrSS jrSS jrSrg)HgDist   c                    [         R                  R                  5       nSUS'   UR                  SS5        [        R
                  " SSU R                  S/US9nS	U;  $ )
z1Check whether there are uncommitted changes in hgCLC_ALLLANGUAGENhg-Rsummary)r   s   commit: (clean))r7   rM   copypopr   r   rN   )rb   r   outs      r)   r   HgDist.have_dirty_index   sV    jjooH 	
D!%%tT4==)&LRUV!,,r*   c                4   U R                  5       (       a$  [        [        U R                  R                  5        U R
                  (       a  [        R                  " S5        [        R                  " U R                  SS9  [        R                  R                  U R                  U R                  S-   5      nUS-   nUS-   nUS-   n[        R                  R                  U R                  U R                  S-   5      n[        R                  " S	S
SU R                   SSSSU R                   S-   U/
5        / nSU;   a[  SS KnUR%                  US5       n	[%        US5       n
[&        R(                  " X5        S S S 5        S S S 5        UR+                  U5        SU;   a[  SS KnUR%                  US5       n[%        US5       n
[&        R(                  " X5        S S S 5        S S S 5        UR+                  U5        SU;   a[  SS KnUR%                  US5       n[%        US5       n
[&        R(                  " X5        S S S 5        S S S 5        UR+                  U5        [        R0                  " U5        SU;   a9  [        R                  " S	S
SU R                   SSSU/5        UR+                  U5        U$ ! , (       d  f       GNA= f! , (       d  f       GNK= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f)Nz4dist scripts are not supported in Mercurial projectsT)exist_okz.tarz.xzz.bz2z.gzr   r   r   r   z-Sz-tr   z-Xz
/.hg[a-z]*r   r   wbr,   r   r   r   )r   rG   r   r^   rF   r[   r   rA   r7   r   r`   r8   rL   rY   r   r   rN   lzmar2   r   copyfileobjr   bz2gzipunlink)rb   rh   tarnamexznamebz2namegznamezipnamer   r  xftfr  bfr  zfs                  r)   ri   HgDist.create_dist  sL     ""4dll6N6NOLLOP
DMMD1'',,t}}dnnv.EF5F"5'',,t}}dnnv.EF 	tYdmmT4QV#T]]\%A7L 	Mh64(BWd0Cr""2* 1D('h'4(BWd0Cr""2* 1D((h64(BWd0Cr""2* 1D('
		'H!!4D$--tUZ\c"de(# 1D0C((
 1D0C((
 1D0C((sl   KJ06K3K& KK&L	!K88L	0
J?	:K
K
K#	K&&
K58
L	L		
Lrg   Nr   r   )r   r   r   r   r   ri   r   rg   r*   r)   r   r      s    -*r*   r   c                   [         R                  " U SX/-   5      S:w  a  [        S5        g[         R                  " XBS9S:w  a  [        S5        g[         R                  " US/-   US9S:w  a  [        S5        g[        R                  R                  5       nX5S	'   [         R                  " US
/-   X%S9S:w  a  [        S5        gg)Nz--backend=ninjar   z,Running Meson on distribution package failedr   )r   z)Compiling the distribution package failedtestz5Running unit tests on the distribution package failedDESTDIRinstall)r   r   z*Installing the distribution package failed)r   r   r   r7   rM   r   )meson_commandunpacked_src_dirbuilddir
installdir
ninja_argsmyenvs         r)   run_dist_stepsr  3  s    }(9;K'VVW[\\<=z0A59:zVH,(;q@EFJJOOE!)zYK/XIQN:;r*   c                6   [        SU  35        [        R                  R                  US5      n[        R                  R                  US5      n[        R                  R                  US5      nXVU4 HH  n[        R                  R	                  U5      (       a  [        U5        [        R                  " U5        MJ     [        5       n	[        R                  " X5        [        [        R                  R                  US5      5      n
[        U
5      S:X  d   eU
S   nUR                  5       nUS/-  nU[        U5      -  nX-  n[        XXgU	5      nUS:  a  [        S	U 35        U$ [        U5        [        U5        [        U5        [        S
U  S35        U$ )NzTesting distribution package zdist-unpackz
dist-buildzdist-install*r   r   setupzDist check build directory was zDistribution package z tested)r   r7   r8   rL   rK   r   mkdirr   r   unpack_archiver   r   r   create_cmdline_argsr  )packagename_meson_commandextra_meson_argsrZ   privdir	unpackdirr  r  rO   r  unpacked_filesr  r  r   s                 r)   
check_distr(  D  sa   	)+
78Wm4Iww||G\2Hg~6J:.77>>! #
 / J
+1"'',,y#67N~!###%a("'')MgYM(22M%M
(PZ
[C
Qw/z:; J	 	Y'X&Z(%k]':;Jr*   c                   [         R                  " 5       n[        U5        [        R                  " SUR                  / 5      5      n[        R                  " U5        [        R                  " X5        UR                  R                  [        S5      S5        [        R                  " [        R                  " U5      5      $ )Nzcoredata.SharedCMDOptionsbackendry   )argparseArgumentParsermsetup_argparseTcast
parse_argsr   parse_cmd_line_optionsread_cmd_line_filecmd_line_optionsr   r   ro   r   format_cmd_line_options)rZ   r(   argss      r)   r!  r!  a  s    $$&FF66-v/@/@/DED##D)/i	2B7;;x77=>>r*   c                   / nU R                   R                  S5       H?  nU[        ;  a!  [        R                  " SU S[         S35        UR                  U5        MA     [        W5      S:X  a  [        R                  " S5        U$ )N,zValue "z" not one of permitted values .r   zNo archive types specified.)formatsr   archive_choicesrC   rD   r   r   )r^   resultis      r)   determine_archives_to_generater=  j  sq    F__""3'O#HHwqc!??PPQRSa ( 1v{./Mr*   c                H   [        U R                  5      S-  S-  nUR                  5       (       d  [        SU R                  < S35      e[        R
                  " U R                  5      n[        R                  " SUR                  R                  R                  R                  [        S5      5      5      n[        U5        UR                  R                  nUR                  R                  n[         R"                  R%                  US5      nUR&                  S-   UR(                  -   n[+        U 5      n0 n	/ n
U R,                  (       a  [         R"                  R%                  XBR.                  5      nUR0                   HE  n[2        R4                  " X5      n[         R"                  R%                  UR.                  U5      X'   MG     U
R7                  S5        [9        U5      (       a  [:        nO6[=        U5      (       a  U	(       a  [?        S	5        g
[@        nO[?        S5        g
U" XtXRRB                  X5      nURE                  U5      nUc  g
SnU RF                  (       d  [I        US   [K        5       XU5      nUS:X  a   U H  n[M        U5        [?        SU5        M     U$ )Nzmeson-privatez	build.datz
Directory z- does not seem to be a Meson build directory.r   vsenvr   z-Dwrap_mode=nodownloadzC--include-subprojects option currently not supported with Mercurialr   z5Dist currently only works with Git or Mercurial reposr   Created)'r   r!   is_filer
   r   loadr.  r/  environmentr   optstoreget_value_forr   r   
source_dir	build_dirr7   r8   rL   project_nameproject_versionr=  include_subprojectssubproject_dirr\   r   get_directoryr   rQ   r   rT   r   r   r[   ri   no_testsr(  r   r>   )r^   	buildfileb
need_vsenvrN   rZ   priv_dirrY   rh   r\   r$  rK  sub	directoryclsprojectnamesr   r   s                      r)   runrW  t  s   WZZ ?2[@Iz'**7deff

7::A 6 6 ? ? M MiX_N` abJ
}}''H}}&&Hww||Ho6H$q'8'88I-g6HK""h0@0@A==C**>?I!ww||A,<,<iHK ! 	 89 h	xWXEF)xVG)E}	
Ba"3"57GS[\	QwD)T"  Ir*   )r(   zargparse.ArgumentParserr   r   )r:   rX   r   r   )rE   rX   rF   r   r   r   )rN   rX   r   r   )r  r   r  rX   r  rX   r  rX   r  r   r   int)r"  rX   r#  zImmutableListProtocol[str]r$  r   rZ   rX   r%  rX   r   rX  )rZ   rX   r   r   )r^   r]   r   r   )r^   r]   r   rX  )@
__future__r   r   r+  r7   rC   ro   r   r   r   r   r/   typingr.  dataclassesr   r   pathlibr   mesonbuild.environmentr   r   mesonbuild.mesonlibr	   r
   r   r   r   r   r   r^   r   mesonbuild.msetupr   r-  mesonbuild.wrapr   
mesonbuildr   r   r   scripts.meson_exer   TYPE_CHECKING_typingr   mesonlibr   r:  r   r>   r   rG   rQ   rT   ABCMetarV   r   r   r  r(  r!  r=  rW  rg   r*   r)   <module>rg     s   
 #   	 
        !   <D D D  >   , , &??.14(''"$ 
JK m !H8 'S[[ ' 'TXd Xv5T 5p":?1r*   