
    eT                       d dl mZ 	 d dlZd dlZd dlZddlmZmZm	Z	 ddlm
Z
mZmZ ddl
mZ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mZ dd
lmZ ddlmZ ddlmZm Z  ddl!m"Z" ejF                  r=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+m,Z,  ejZ                  d      Z. G d de%      Z/d#dZ0dZ1e2eeefZ3 G d de"      Z4 G d d      Z5 G d ded         Z6 G d de      Z7 G d  d!e      Z8d$d"Z9y)%    )annotationsN   )ExtensionModuleModuleReturnValue
ModuleInfo   )buildmesonlibmlog)CustomTargetCustomTargetIndex)
DependencyInternalDependency)InvalidArguments	noPosargsnoKwargstyped_kwargsFeatureDeprecatedContainerTypeInfo	KwargInfotyped_pos_args)_CustomTargetHolder)NoneType)FileMesonException)ExternalProgram)	TypedDict)ModuleState)Environment)Interpreter)TYPE_kwargsTYPE_var_Tc                      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ed<   y)GenerateDocKwargs3T.Union[str, File, CustomTarget, CustomTargetIndex]sitemapindexstrproject_versionT.Optional[str]html_extra_themeT.List[str]include_pathsfT.List[T.Union[Dependency, build.StaticLibrary, build.SharedLibrary, CustomTarget, CustomTargetIndex]]dependenciesz0T.List[T.Union[CustomTarget, CustomTargetIndex]]dependsgi_c_source_rootsextra_assetsextra_extension_pathsT.List['HotdocTarget']subprojectsboolinstallN)__name__
__module____qualname____annotations__     ;/usr/lib/python3/dist-packages/mesonbuild/modules/hotdoc.pyr%   r%   ,   sI    DDBB))""||AA&&!!**++r>   r%   c                ,    t        | t              s| gS | S N)
isinstancelist)values    r?   ensure_listrE   :   s    eT"wLr>   z0.8.100c                      e Zd ZddZy)HotdocExternalProgramc                    t        j                  | j                         |z   t         j                        j                  S )N)stdout)
subprocessrunget_commandDEVNULL
returncode)selfcmds     r?   
run_hotdocz HotdocExternalProgram.run_hotdocF   s-    ~~d..036z?Q?QR]]]r>   N)rP   r-   returnint)r9   r:   r;   rQ   r=   r>   r?   rG   rG   E   s    ^r>   rG   c                      e Zd ZddZdddZddZddZddZ	 	 ddZddZ	dd	Z
dd
ZddZddZddZddZddZddZd dZddZd!dZy)"HotdocTargetBuilderc                x   || _         |j                  dd      | _        || _        || _        || _        || _        t        j                         | _	        |j                  j                         | _        |j                  j                         | _        |j                  | _        |j                  j!                         | _        dd|ddt$        j&                  j)                  | j                  | j                  | j                  dz         g| _        t-               | _        t-               | _        g | _        g | _        y )Nbuild_by_defaultFconfz--project-namez--disable-incremental-buildz--output-doc)hotdocpoprW   kwargsnamestateinterpreterr
   
OrderedSetr.   environmentget_build_dirbuilddirget_source_dir	sourcedirsubdirget_build_commandbuild_commandospathjoinrP   set_extra_extension_pathsr3   extra_depends_subprojects)rO   r]   r^   rZ   r_   r\   s         r?   __init__zHotdocTargetBuilder.__init__L   s     &

+=u E	
&7?7J7J7L))779**99;ll"..@@B&,.>Fc&0"'',,t}}dkk[_[d[dgm[m2n&p '*e#Er>   Nc                    |s!|j                  d      j                  dd      }| j                  j                  |      }|
|r ||      }| j	                  ||       y )N-_)stripreplacer\   r[   set_arg_value)rO   optionargnamevalue_processorrD   s        r?   process_known_argz%HotdocTargetBuilder.process_known_argb   sT    ll3'//S9G(#E*E65)r>   c                   |y t        |t              r|r| j                  j                  |       y y t        |t              r{|rxg }|D ]3  }t        |t
              r|j                  d      r
|d|z  gz  }.||gz  }5 |r | j                  j                  |g|z          y | j                  j                  |       y y t        |t
              r"| j                  j                  | d| g       y | j                  j                  ||g       y )Nrr   z %s=)rB   r7   rP   appendrC   r)   
startswithextend)rO   rw   rD   escaped_valuees        r?   rv   z!HotdocTargetBuilder.set_arg_valuel   s    =eT"' t$
 !# -A!!S)all3.?%%!)4%!,	-
 HHOOVH}$<=HHOOM2 & %%F81UG!4 560r>   c           
     T   t        |t              r|D ]  }| j                  ||        y t        t        t
        t        j                  t        t        t        j                  f}t        ||      s4t        dj                  |||D cg c]  }|j                   c}            y c c}w )Nz'Argument "{}={}" should be of type: {}.)rB   rC   check_extra_arg_typer)   r7   r   r	   IncludeDirsr   r   BuildTargetr   formatr9   )rO   argrD   vvalid_typests         r?   r   z(HotdocTargetBuilder.check_extra_arg_type   s    eT" 2))#q12D$(9(9<IZ\a\m\mn%-"#L#S#SU=AQZZ=$? @ @ .=s   B%c                    | j                   j                         D ]>  \  }}d|j                  dd      z   }| j                  ||       | j	                  ||       @ y )Nz--rs   rr   )r\   itemsru   r   rv   )rO   r   rD   rw   s       r?   process_extra_argsz&HotdocTargetBuilder.process_extra_args   sW    ++++- 	.JCCKKS11F%%c51vu-	.r>   c                P   t        |t              s|g}	 | j                  j                  |      x}}|r ||      }|D ]-  }	t        ||	      s|rt        |t              s|g|fc S ||fc S  t	        | d| d|       # t
        $ r |rt	        | d      |||fcY S Y yw xY w)Nz field value z is not valid, valid types are z mandatory field not foundNN)rB   rC   r\   r[   r   KeyError)
rO   typesrx   defaultry   	mandatory
force_listuvaluerD   r   s
             r?   	get_valuezHotdocTargetBuilder.get_value   s    %&GE	(![[__W55FU'. )eQ'!*UD*A %w. &=(	)
 !G9M% A55:G"= > > 	($y0J%KLL"'' # 	(s#   8B B 'B -B B%$B%c                    |D ]I  }|| j                   v r| j                   j                  |       | j                  j                  d|g       K y )Nz--extra-extension-path)rm   addrP   r   )rO   pathsrj   s      r?   add_extension_pathsz'HotdocTargetBuilder.add_extension_paths   sL     	>Dt222''++D1HHOO5t<=	>r>   c                n    |j                  d| j                        j                  d| j                        S )Nz@SOURCE_ROOT@z@BUILD_ROOT@)ru   re   rc   )rO   strings     r?   replace_dirs_in_stringz*HotdocTargetBuilder.replace_dirs_in_string   s+    ~~ot~~>FF~W[WdWdeer>   c                   | j                   j                  dg      dk7  ry | j                  j                  d      }|j	                  t
        j                  j                  | j                  | j                  j                        t
        j                  j                  | j                  | j                  j                        g       | xj                  dg|z   z  c_        y )Nz--has-extension=gi-extensionr   r2   z--gi-c-source-roots)rZ   rQ   r\   r[   r   ri   rj   rk   re   r^   root_subdirrc   rP   rO   rD   s     r?   process_gi_c_source_rootsz-HotdocTargetBuilder.process_gi_c_source_roots   s    ;;!!#A"BCqH 34GGLL)?)?@GGLL

(>(>?
 	
 	*+e33r>   c           	        t               }t        j                  t        |            D ]  }t	        |t
              r| j                  j                  |j                        }|j                  |D cg c]  }| j                  |       c}       |j                  | j                  |j                               |j                  | j                  |j                               |j                  | j                  |j                               t	        |t              r!|j                  |j!                                t	        |t"        j$                  t"        j&                  f      rQ| j(                  j+                  |       |j-                         D ]!  }|j                  |j/                                # t	        |t0              r| j                  |j3                                | j4                  j7                  |j8                         | j                  |j8                         | j:                  j=                  t>        j@                  jC                  | jD                  |jF                  jH                               | xjJ                  |jL                  D cg c]  }d|z   	 c}z  c_%        | jO                  |jP                         t	        |tR        t"        jT                  f      r| j(                  j+                  |       t	        |tV              s| j(                  j+                  |jX                          |D cg c]  }|j[                  d       c}S c c}w c c}w c c}w )Nz--extra-assets=z-I).rl   r
   listifyrE   rB   r   r^   get_include_argsinclude_directoriesupdater   process_dependencies	librariessourcesext_depsr   get_compile_argsr	   StaticLibrarySharedLibraryrn   r}   get_include_dirsget_incdirsHotdocTargetget_target_dependenciesro   r   r6   r.   r   ri   rj   rk   rc   hotdoc_confrf   rP   r3   r   r4   r   r   r   targetrt   )	rO   depscflagsdepinc_argsxincdpfs	            r?   r   z(HotdocTargetBuilder.process_dependencies   sr   ##K$56 	6C#12::66s7N7NO(02#$  $::1= 2 3d77FGd77DEd77EFC,c2245C%"5"5u7J7J!KL""))#.002 6DMM$"2"2"456C.))#*E*E*GH!!((9))#//:""&&rww||DMM3??CYCY'Z[C<L<LMq.2MM(()B)BCC,0A0A!BC""))#.C!23""))#**53	66 (..!..12" N /s   1M%
M*

M/c                    | j                   j                  d      | _        | j                  D ]  }| j                  j	                  d|g       ! y )Nr3   z--extra-assets)r\   r[   _extra_assetsrP   r   )rO   assets_paths     r?   process_extra_assetsz(HotdocTargetBuilder.process_extra_assets   sB    ![[__^<-- 	=KHHOO-{;<	=r>   c                    | j                   j                  d      }| j                  |       | j                  j	                  |       y Nr6   )r\   r[   r   ro   r   r   s     r?   process_subprojectsz'HotdocTargetBuilder.process_subprojects   s6    .!!%(  'r>   c           	     D   g }t        j                  | j                  d      D ]  }t        |t              rX|j                  | j                  j                  j                         | j                  j                  j                               }n|t        |t        j                        r|j                         D ]  }|j                  t        j                  j!                  | j"                  |j%                         |             |j                  t        j                  j!                  | j&                  |j%                         |              -t        |t        j(                  t*        f      rA| j,                  j                  |       | j.                  j0                  j3                  |      }nZt        |t4              rJ| j,                  j                  |j6                         | j.                  j0                  j3                  |      }|j                  |        |S )NT)flatten)r
   r   rP   rB   r   absolute_pathr^   ra   rd   rb   r	   r   r   r}   ri   rj   rk   re   
get_curdirrc   r   r   rn   r_   backendget_target_filename_absr   r   )rO   rP   r   inc_dirs       r?   flatten_config_commandz*HotdocTargetBuilder.flatten_config_command   s   ##DHHd; 	C#t$''

(>(>(M(M(O(,

(>(>(L(L(NPC!2!23"0 WGJJrww||DNNCNN<LgVWJJrww||DMM3>>;KWUVW C%"3"3\!BC""))#.&&..FFsKC!23""))#**5&&..FFsKJJsO#	& 
r>   c                   t         j                  j                  t         j                        }t         j                  j	                  | j
                  | j                        }t        j                  dt        j                  | j                               t        j                  |       | j                  j                  | j                               dk7  rt        d      t        j                  |       y )Nz%Generating Hotdoc configuration for: r   zhotdoc failed to configure)ri   rj   abspathcurdirrk   re   rf   r   logboldr]   chdirrZ   rQ   r   r   )rO   cwdncwds      r?   generate_hotdoc_configz*HotdocTargetBuilder.generate_hotdoc_config  s    ggoobii(ww||DNNDKK88$))DII:NO
;;!!$"="="?@AE !=>>
r>   c                    t        |t              r+g }|D ]"  }|j                  | j                  |             $ |S t        |t              r+t        j                  | j                  | j                  |      S |S rA   )	rB   rC   r}   ensure_filer)   r   from_source_filere   rf   )rO   rD   resvals       r?   r   zHotdocTargetBuilder.ensure_file  sh    eT"C 2

4++C012JeS!((eLLr>   c                   t         j                  j                  |      r|}n5t         j                  j                  | j                  | j
                  |      }t         j                  j                  |      st        d| d      t         j                  j                  |t         j                  j                  | j                  | j
                              S )N"z" is not a directory.)
ri   rj   isabsrk   re   rf   isdirr   relpathrc   )rO   rD   _dirs      r?   
ensure_dirzHotdocTargetBuilder.ensure_dir%  s    77==D77<<UCDww}}T""Qtf,A#BCCwwtRWW\\$--%MNNr>   c                L    dD ]  }|| j                   v st        d| d       y )N)	conf_filez
Argument "z" is forbidden.)r\   r   )rO   r   s     r?   check_forbidden_argsz(HotdocTargetBuilder.check_forbidden_args0  s3      	JCdkk!&C5'HII	Jr>   c                     j                           j                  d j                          j                  d        j                  d j                          j                  d j                          j                  j                   fd j                  j                  d      D                j                  dd	 j                  
        j                           j                           j                   j                  j                  d              j                           j                  j                   j                  j                  d              j                  j                  d      } j                           j                   dz   }|dz   }t"        j$                  j'                   j(                   j*                  |      }t-        |dd      5 }|j/                  d       d d d         xj0                  d|gz  c_         j                  j3                  t"        j$                  j'                   j(                   j*                                j                  j3                  t"        j$                  j'                   j4                   j*                               t"        j$                  j'                   j(                   j*                   j                   dz         } xj0                  d|gz  c_         j                  D ]  } j0                  j                  d|g       !  j6                  j8                  j:                  j=                  t?        j@                  d j6                  jB                              r j0                  jE                  d        jG                           jH                  ddgz    jJ                  jM                         z   dd|gz   dt"        j$                  j'                   j(                   j*                        gz   }tO        | j*                   j6                  jB                   j6                  j8                  tQ        jR                   j*                  |       jT                   jV                   jX                  | j                  |gg t"        j$                  j[                  |       j\                        }	d }
|rt"        j$                  j'                   j6                  j=                  d        j6                  j=                  d!            } j                  j_                  d"d#      }ta        |tb              s-te        jf                  d$d% j6                  jB                         d#}|rAt"        j$                  j'                  |d&      }t"        j$                  j'                  |d&      }nLt"        j$                  j'                  |d'      }t"        j$                  j'                  |d( j                   d'      } j6                  jh                  jk                   jH                  ddd)|d*|d+ j                   dt"        j$                  j'                   j(                   j*                        g
z    jJ                  jM                         z   dd|gz         }
d(|
_6        |	|
fS # 1 sw Y   xY w),Nz--index)ry   z--project-versionz	--sitemapz--html-extra-themec              3  @   K   | ]  }j                  |        y wrA   )r   ).0r   rO   s     r?   	<genexpr>z3HotdocTargetBuilder.make_targets.<locals>.<genexpr>;  s     !_$//!"4!_s   r.   z--c-include-directoriesr0   )rx   ry   r4   r1   r8   rY   z.jsonwzutf-8)encodingz{}z--conf-filez.depsz--deps-file-destz--include-pathwerror)
subprojectz--fatal-warningsz
--internalrZ   rK   z
--builddir)rf   r   ra   r   r4   r3   r6   commandrn   outputsr   depfilerW   prefixdatadirdevhelp_activateFz6hotdoc.generate_doc() devhelp_activate must be booleanz1.1.0devhelphtmldocz	--installz--docdirz--name)7r   rz   r   r   r.   r   r\   r[   r   r   r   r   r   rn   r   r   r]   ri   rj   rk   rc   rf   openwriterP   r   re   r^   ra   coredata
get_optionr
   	OptionKeyr   r}   r   rh   rZ   rL   r   r   from_built_filerm   r   ro   basenamerW   getrB   r7   r   
single_user   get_executable_serialisationtag)rO   r8   fullnamehotdoc_config_namehotdoc_config_pathr   r   rj   
target_cmdr   install_scriptr   r   install_from
install_tos   `              r?   make_targetsz HotdocTargetBuilder.make_targets5  s?   !!#y$:J:JK23{D<L<LM3T__U!!!_dkkooo>^!__8.bfb{b{|&&(!!#  1H!IJ  "!!$++//)"<=++//),!99v%%/WW\\MM4;;(:<$cG< 	GGDM	 	]$677rww||DMM4;;GHrww||DNNDKKHI'',,t}}dkk499w;NO'11&& 	6DHHOO-t45	6 ::!!**55h6H6H^b^h^h^s^s6tuHHOO./##%''<*BBKK##%&).?Q(RS277<<t{{CDE
 h%)[[)-)>)>*.***@*@*.*>*>"&++/A+C484O4O+/+=+=*.*;*;&0,0,>,>'/j&(&(gg&6&6w&?/3/D/DF  ggll4::#8#8#BDJJDYDYZcDdeGkkoo&8%@Ggt,!,,-egnptpzpz  qF  qF  G!ww||Hi@WW\\'9=
!ww||Hf=WW\\'5$))VL
!ZZ//LLTM_M_h\J$))bggll4==$++FcH NH '')N* '9:N; <N "'N''{	 	s   %Z??[	)r]   r)   r^   r   rZ   rG   r_   r    r   )rw   r)   rx   r+   ry   zT.Optional[T.Callable]rR   None)rw   r)   rD   r"   rR   r  )r   r)   rD   r"   rR   r  )rR   r  )NNFF)r   z T.Union[T.List[str], T.Set[str]]rR   r  )r   r)   rR   r)   )r   r/   rR   r-   )rR   r-   )rD   r&   rR   z.T.Union[File, CustomTarget, CustomTargetIndex])rD   r)   rR   r)   )rR   z7T.Tuple[HotdocTarget, mesonlib.ExecutableSerialisation])r9   r:   r;   rp   rz   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r=   r>   r?   rU   rU   J   sl    ,*1B	@. GK.32>f
4/>=(.
	OJ
R(r>   rU   c                  <     e Zd Zd fdZeedd              Z xZS )HotdocTargetHolderc                t    t         |   ||       | j                  j                  d| j                  i       y )Nconfig_path)superrp   methodsr   config_path_method)rO   r   interp	__class__s      r?   rp   zHotdocTargetHolder.__init__  s/    (]D,C,CDEr>   c                    | j                   j                  j                  | j                  j                  j
                  | j                  j                  j                        }|S rA   )held_objectr   r   r_   ra   
source_dir	build_dir)rO   argsr\   rX   s       r?   r  z%HotdocTargetHolder.config_path_method  sO     ++99$:J:J:V:V:a:a:>:J:J:V:V:`:`br>   )r   r   r  r    )r  T.Anyr\   r  rR   r)   )r9   r:   r;   rp   r   r   r  __classcell__r  s   @r?   r	  r	    s%    F   r>   r	  r   c                  <     e Zd Z	 	 	 	 	 	 	 	 	 	 d fdZddZ xZS )r   c	                l    t        
|   ||||fi |	ddi || _        || _        || _        || _        y )Nabsolute_pathsT)r  rp   r   r4   r3   r6   )rO   r]   rf   r   r   r4   r3   r6   ra   r\   r  s             r?   rp   zHotdocTarget.__init__  sC     	vz;^&^Y]^&%:"(&r>   c                D    | j                   j                         }g |d<   |S r   )__dict__copy)rO   r   s     r?   __getstate__zHotdocTarget.__getstate__  s#    mm  "M
r>   )r]   r)   rf   r)   r   r)   r   r   r4   z
T.Set[str]r3   r-   r6   r5   ra   r   r\   r  )rR   dict)r9   r:   r;   rp   r  r  r  s   @r?   r   r     s5    '(2'BM'4'CN'Z_'r>   c                  2    e Zd Z edd      Zd fdZe eded      dd              Z	 ede       e
d ed	ed
       eded
       eded
       edeef       ed eee      d
g        ed eeeej$                  ej&                  eef      d
g        ed eeeef      d
g d       ed eee      d
g        ed eee      d
g        ed eee      d
g        ed eee      d
g        eded      d
      d d              Z xZS )!HotDocModulerZ   z0.48.0c                   t         |   |       t        d      | _        | j                  j	                         st        d      | j                  j                  |      }t        j                  |dt               st        dt         d      | j                  j                  | j                  | j                  d       y )NrZ   zhotdoc executable not foundz>=zhotdoc z required but not found.))has_extensionsgenerate_doc)r  rp   rG   rZ   foundr   get_versionr
   version_compareMIN_HOTDOC_VERSIONr  r   r$  r%  )rO   r_   versionr  s      r?   rp   zHotDocModule.__init__  s    %+H5{{  " !>??++))+6''26H5I1JK 7+=*>>W!XYY"11 --
 	r>   zhotdoc.has_extensionsr   )varargsmin_varargsc                p    | j                   j                  |d   D cg c]  }d| 	 c}      dk(  S c c}w )Nr   z--has-extension=)rZ   rQ   )rO   r^   r  r\   	extensions        r?   r$  zHotDocModule.has_extensions  s<     {{%%W[\]W^&_))9)'E&_`deee&_s   3zhotdoc.generate_docr'   T)requiredr(   r*   r,   r.   )r   r   r0   r1   0.64.1)r   r   sincer2   r3   r4   r6   r8   F)r   )allow_unknownc                @   |d   }t        d |d   D              r-t        j                  dd|j                  d|j                         t        ||| j                  | j                  |      }|j                         \  }}|g}|r|j                  |       t        ||      S )Nr   c              3  H   K   | ]  }t        |t        t        f        y wrA   )rB   r   r   )r   r   s     r?   r   z,HotDocModule.generate_doc.<locals>.<genexpr>  s     `Az!l,=>?`s    "r0   z<hotdoc.generate_doc dependencies argument with custom_targetr0  zuse `depends`)anyr   r   r   current_noderU   rZ   r_   r  r}   r   )	rO   r^   r  r\   project_namebuilderr   r  targetss	            r?   r%  zHotDocModule.generate_doc  s    > Aw`P^I_``(()g)153C3C_V[VhVhj%lE4;;HXHXZ`a!(!5!5!7TZS[NN>* 11r>   )r_   r    )r^   r   r  zT.Tuple[T.List[str]]r\   r!   rR   r7   )r^   r   r  zT.Tuple[str]r\   r%   rR   r   )r9   r:   r;   r   INFOrp   r   r   r)   r$  r   r   
file_typesr   r   rC   r   r	   r   r   r   r   r   r7   r%  r  r  s   @r?   r"  r"    s   h)D +SaHf I f )3/)Z$7':5#S48$sHo6/#4T3#?WYZdZ1D1DeFYFY%13D%F G	
 	d\3D$EF	
 	%'8s'CT[]^."3D#">VXY)+<T3+GQU_ab-!24!FPT^`a)T517:2; 0<2r>   r"  c                d    t        |       }|j                  j                  t        t               |S rA   )r"  r_   append_holder_mapr   r	  )r_   mods     r?   
initializer?    s&    
{
#COO%%l4FGJr>   )rD   zT.Union[_T, T.List[_T]]rR   z
T.List[_T])r_   r    rR   r"  ):
__future__r   ri   rJ   typingT r   r   r   r	   r
   r   r   r   r0   r   r   interpreterbaser   r   r   r   r   r   r   r   interpreter.interpreterobjectsr   interpreter.type_checkingr   r   r   programsr   TYPE_CHECKINGtyping_extensionsr   r   ra   r   r_   r    r!   r"   TypeVarr#   r%   rE   r)  r)   r;  rG   rU   r	  r   r"  r?  r=   r>   r?   <module>rK     s    # U   < < $ $ 3 9   A 0 + &??+))7	4BI   4'89
^O ^
}( }(@

,^< 
< $@2? @2Fr>   