o
    ldM                     @  s(  d dl mZ 	 d dlZd dlZd dlmZ d dlmZmZ d dlm	Z	 ddl
mZmZ ddl
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 dd Z dZ!e"ej#ej$ej%fZ&G dd dZ'G dd deZ(G dd dej$Z)G dd deZ*dd Z+dS )    )annotationsN)mesonlib)mlogbuild)MesonException   )ModuleReturnValue
ModuleInfo)ExtensionModule   )
DependencyInternalDependency)InvalidArguments	noPosargsnoKwargstyped_kwargsFeatureDeprecatedContainerTypeInfo	KwargInfotyped_pos_args)CustomTargetHolder)NoneType)ExternalProgramc                 C  s   t | ts| gS | S N)
isinstancelist)value r   xhome/ych/rk3568/buildroot/output/rockchip_rk3568_recovery/host/lib/python3.10/site-packages/mesonbuild/modules/hotdoc.pyensure_list$   s   
r   z0.8.100c                   @  s   e Zd Zdd Zd'ddZdd Zd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S ))HotdocTargetBuilderc                 C  s   || _ |dd| _|| _|| _|| _|| _t | _	|j
 | _|j
 | _|j| _|j
 | _dd|ddtj| j| j| jd g| _t | _t | _g | _g | _d S )Nbuild_by_defaultFconfz--project-namez--disable-incremental-buildz--output-doc)hotdocpopr!   kwargsnamestateinterpreterr   
OrderedSetinclude_pathsenvironmentget_build_dirbuilddirget_source_dir	sourcedirsubdirZget_build_commandbuild_commandospathjoincmdset_extra_extension_pathsextra_assetsextra_depends_subprojects)selfr'   r(   r$   r)   r&   r   r   r   __init__1   s$   

zHotdocTargetBuilder.__init__Nc                 C  sF   |s| ddd}| j|}|d ur|r||}| || d S )N-_)stripreplacer&   r%   set_arg_value)r<   optionargnamevalue_processorr   r   r   r   process_known_argG   s   z%HotdocTargetBuilder.process_known_argc                 C  s   |d u rd S t |tr|r| j| d S d S t |trS|rQg }|D ]}t |tr6|dr6|d| g7 }q"||g7 }q"|rI| j|g|  d S | j| d S d S t |trf| j| d| g d S | j||g d S )Nr>   z %s=)r   boolr6   appendr   str
startswithextend)r<   rC   r   Zescaped_valueer   r   r   rB   Q   s(   


z!HotdocTargetBuilder.set_arg_valuec                 C  sj   t |tr|D ]}| || qd S tttjtjtj	tj
tjf}t ||s3td||dd |D d S )Nz'Argument "{}={}" should be of type: {}.c                 S  s   g | ]}|j qS r   )__name__).0tr   r   r   
<listcomp>{   s    z<HotdocTargetBuilder.check_extra_arg_type.<locals>.<listcomp>)r   r   check_extra_arg_typerJ   rH   r   Filer   IncludeDirsCustomTargetCustomTargetIndexBuildTargetr   format)r<   argr   vZvalid_typesr   r   r   rR   r   s   

z(HotdocTargetBuilder.check_extra_arg_typec                 C  s@   | j  D ]\}}d|dd }| || | || qd S )Nz--r?   r>   )r&   itemsrA   rR   rB   )r<   rY   r   rC   r   r   r   process_extra_args}   s
   z&HotdocTargetBuilder.process_extra_argsFc           
      C  s   t |ts|g}z:| j| }}|r||}|D ]}	t ||	r6|r/t |ts/|g|f  W S ||f  W S qt| d| d|  ty_   |rRt| d|d ur\||f Y S Y dS w )Nz field value z is not valid, valid types are z mandatory field not foundNN)r   r   r&   r%   r   KeyError)
r<   typesrD   defaultrE   	mandatoryZ
force_listZuvaluer   rP   r   r   r   	get_value   s.   

zHotdocTargetBuilder.get_valuec                 C  s6   |D ]}|| j v r
q| j | | jd|g qd S )Nz--extra-extension-path)r8   addr6   rL   )r<   pathsr4   r   r   r   add_extension_paths   s   
z'HotdocTargetBuilder.add_extension_pathsc                 C  s   | d| j d| jS )Nz@SOURCE_ROOT@z@BUILD_ROOT@)rA   r0   r.   )r<   stringr   r   r   replace_dirs_in_string   s   z*HotdocTargetBuilder.replace_dirs_in_stringc                 C  sh   | j dgdkrd S | jd}|tj| j| j	j
tj| j| j	j
g |  jdg| 7  _d S )Nz--has-extension=gi-extensionr   gi_c_source_rootsz--gi-c-source-roots)r$   
run_hotdocr&   r%   rL   r3   r4   r5   r0   r(   Zroot_subdirr.   r6   r<   r   r   r   r   process_gi_c_source_roots   s   z-HotdocTargetBuilder.process_gi_c_source_rootsc                   s  t  }tt|D ]}t|tr@ j|j}|	 fdd|D  |	 
|j |	 
|j |	 
|j q
t|trM|	|  q
t|tjtjfrk j| | D ]	}|	|  q`q
t|tr 
|   j|j  
|j  jtj  j!|j"j#   j$dd |j%D 7  _$ &|j' q
t|tj(tj)fr j| q
t|tj*rÈ j|j+ q
dd |D S )Nc                   s   g | ]}  |qS r   )rg   rO   xr<   r   r   rQ      s    z<HotdocTargetBuilder.process_dependencies.<locals>.<listcomp>c                 S  s   g | ]}d | qS )z--extra-assets=r   )rO   pr   r   r   rQ      s    c                 S  s   g | ]}| d qS )z-I)r@   )rO   fr   r   r   rQ          ),r7   r   listifyr   r   r   r(   Zget_include_argsZinclude_directoriesupdateprocess_dependencies	librariessourcesZext_depsr   Zget_compile_argsr   StaticLibrarySharedLibraryr:   rI   Zget_include_dirsget_incdirsHotdocTargetZget_target_dependenciesr;   rL   subprojectsr+   rc   r3   r4   r5   r.   hotdoc_confr1   r6   r9   re   extra_extension_pathsrU   rW   rV   target)r<   depscflagsdepZinc_argsZincdr   rn   r   rt      s<   


z(HotdocTargetBuilder.process_dependenciesc                 C  s.   | j d| _| jD ]
}| jd|g q
d S )Nr9   z--extra-assets)r&   r%   _extra_assetsr6   rL   )r<   Zassets_pathr   r   r   process_extra_assets   s   
z(HotdocTargetBuilder.process_extra_assetsc                 C  s&   | j d}| | | j| d S Nr{   )r&   r%   rt   r;   rL   rj   r   r   r   process_subprojects   s   
z'HotdocTargetBuilder.process_subprojectsc              	   C  s   g }t j| jddD ]q}t|t jr!|| jj | jj	 }nUt|t
jrK| D ]}|tj| j| | |tj| j| | q+q
t|t
jt
jfrb| j| | jj|}nt|t
jrv| j|j | jj|}|| q
|S )NT)flatten)r   rr   r6   r   rS   absolute_pathr(   r,   r/   r-   r   rT   ry   rI   r3   r4   r5   r0   Z
get_curdirr.   rW   rU   r:   r)   backendZget_target_filename_absrV   r~   )r<   r6   rY   inc_dirr   r   r   flatten_config_command   s&   
z*HotdocTargetBuilder.flatten_config_commandc                 C  sh   t jt j}t j| j| j}tdt	| j
 t | | j|  dkr-tdt | d S )Nz%Generating Hotdoc configuration for: r   zhotdoc failed to configure)r3   r4   abspathcurdirr5   r0   r1   r   logZboldr'   chdirr$   ri   r   r   )r<   cwdZncwdr   r   r   generate_hotdoc_config   s   
z*HotdocTargetBuilder.generate_hotdoc_configc                 C  sN   t |trg }|D ]
}|| | q	|S t |tr%tj| j| j	|S |S r   )
r   r   rI   ensure_filerJ   r   rS   Zfrom_source_filer0   r1   )r<   r   resvalr   r   r   r      s   

zHotdocTargetBuilder.ensure_filec                 C  s^   t j|r	|}n
t j| j| j|}t j|s!td| dt j|t j| j	| jS )N"z" is not a directory.)
r3   r4   isabsr5   r0   r1   isdirr   relpathr.   )r<   r   Z_dirr   r   r   
ensure_dir
  s   zHotdocTargetBuilder.ensure_dirc                 C  s(   dD ]}|| j v rtd| dqd S )N)Z	conf_filez
Argument "z" is forbidden.)r&   r   )r<   rY   r   r   r   check_forbidden_args  s
   
z(HotdocTargetBuilder.check_forbidden_argsc                   sd       jd jd  d  jd jd  jd jd  j fdd jdD   jd	d
 jd  	   
    jd     j jd  jd}    jd }|d }tj j j|}t|ddd}|d W d    n1 sw   Y    jd|g7  _ jtj j j  jtj j j tj j j jd }  jd|g7  _ jD ]
} jd|g qψ jjjtj d jj!dr j"d  #   j$ddg  j%&  dd|g dtj j jg }t'| j jj! jjtj() j| j* j+ j,| j|gg tj-| j.d }	d }
|rtj jd! jd"} j/d#d$}t0|t1sbt23d%d& jj! d$}|rttj|d'}tj|d'}ntj|d(}tj|d) jd(} jj45 j$ddd*|d+|d, jdtj j jg
  j%&  dd|g }
d)|
_6|	|
fS )-Nz--index)rE   z--project-versionz	--sitemapz--html-extra-themec                 3  s    | ]}  |V  qd S r   )r   )rO   rZ   rn   r   r   	<genexpr>   s    z3HotdocTargetBuilder.make_targets.<locals>.<genexpr>r+   z--c-include-directoriesdependencies)rD   rE   r}   dependsinstallr#   z.jsonwzutf-8)encodingz{}z--conf-filez.depsz--deps-file-destz--include-pathZwerror)
subprojectz--fatal-warningsz
--internalr$   runz
--builddir)r1   r   r,   r|   r}   r9   r{   commandr:   outputsrv   depfiler!   prefixdatadirZdevhelp_activateFz6hotdoc.generate_doc() devhelp_activate must be booleanz1.1.0devhelphtmldocz	--installz--docdirz--name)7r   rF   r   r   r+   rs   r&   r%   rt   rk   r   re   r   r:   rL   r\   r'   r3   r4   r5   r.   r1   openwriter6   rc   r0   r(   r,   ZcoredataZ
get_optionr   Z	OptionKeyr   rI   r   r2   r$   get_commandrz   rS   Zfrom_built_filer8   r   r;   basenamer!   getr   rH   r   
single_user   Zget_executable_serialisationtag)r<   r   fullnameZhotdoc_config_nameZhotdoc_config_pathrp   r   r4   Z
target_cmdr~   install_scriptr   r   Zinstall_fromZ
install_tor   rn   r   make_targets  s   
"



z HotdocTargetBuilder.make_targetsr]   )NNFF)rN   
__module____qualname__r=   rF   rB   rR   r\   rb   re   rg   rk   rt   r   r   r   r   r   r   r   r   r   r   r   r   r    /   s*    

!
	r    c                      s,   e Zd Z fddZeedd Z  ZS )HotdocTargetHolderc                   s$   t  || | jd| ji d S )NZconfig_path)superr=   methodsrs   config_path_method)r<   r~   Zinterp	__class__r   r   r=   p  s   zHotdocTargetHolder.__init__c                 O  s    | j j| jjj| jjj}|S r   )Zheld_objectr|   r   r)   r,   
source_dir	build_dir)r<   argsr&   r"   r   r   r   r   t  s   z%HotdocTargetHolder.config_path_method)rN   r   r   r=   r   r   r   __classcell__r   r   r   r   r   o  s
    r   c                      s$   e Zd Z fddZdd Z  ZS )rz   c	           
        s>   t  j||||fi |	ddi || _|| _|| _|| _d S )NZabsolute_pathsT)r   r=   r|   r}   r9   r{   )
r<   r'   r1   r   r|   r}   r9   r{   r,   r&   r   r   r   r=   }  s
   "
zHotdocTarget.__init__c                 C  s   | j  }g |d< |S r   )__dict__copy)r<   r   r   r   r   __getstate__  s   
zHotdocTarget.__getstate__)rN   r   r   r=   r   r   r   r   r   r   rz   |  s    rz   c                      sB  e Zd ZeddZ fddZeededddd	 Z	ed
ee
d
ededdededdededdedeefedeeedg dedeeeejejejejfdg dedeeejejfdg ddedeeedg dedeeedg dedeeedg dedeeedg dededddddd  Z  ZS )!HotDocModuler$   z0.48.0c                   s   t  | td _ j std j|}t|dt	 s+tdt	 d fdd}| j_
 j j jd d S )	Nr$   zhotdoc executable not foundz>=zhotdoc z required but not found.)c                   s   t j j |  t jdjS )N)stdout)
subprocessr   r$   r   DEVNULL
returncode)r6   rn   r   r   ri     s   z)HotDocModule.__init__.<locals>.run_hotdoc)has_extensionsgenerate_doc)r   r=   r   r$   foundr   get_versionr   Zversion_compareMIN_HOTDOC_VERSIONri   r   rs   r   r   )r<   r)   versionri   r   rn   r   r=     s   

zHotDocModule.__init__zhotdoc.has_extensionsr   )varargsZmin_varargsc                 C  s   | j dd |d D dkS )Nc                 S  s   g | ]}d | qS )z--has-extension=r   )rO   	extensionr   r   r   rQ     rq   z/HotDocModule.has_extensions.<locals>.<listcomp>r   )r$   ri   )r<   r(   r   r&   r   r   r   r     s   zHotDocModule.has_extensionszhotdoc.generate_docZsitemapT)requiredindexZproject_versionZhtml_extra_themer+   )rr   r`   r   r   0.64.1)rr   r`   Zsincerh   r9   r}   r{   r   F)r`   )Zallow_unknownc           	      C  sv   |d }t dd |d D rtdd|jd|j t||| j| j|}| \}}|g}|r4|	| t
|d |S )Nr   c                 s  s"    | ]}t |tjtjfV  qd S r   )r   r   rU   rV   rl   r   r   r   r     s     z,HotDocModule.generate_doc.<locals>.<genexpr>r   z<hotdoc.generate_doc dependencies argument with custom_targetr   zuse `depends`)anyr   r   r   Zcurrent_noder    r$   r)   r   rI   r   )	r<   r(   r   r&   project_namebuilderr~   r   targetsr   r   r   r     s   
zHotDocModule.generate_doc)rN   r   r   r	   INFOr=   r   r   rJ   r   r   r   
file_typesr   r   r   r   r   rw   rx   rU   rV   rz   rH   r   r   r   r   r   r   r     sJ    
r   c                 C  s   t | }|jtt |S r   )r   r)   Zappend_holder_maprz   r   )r)   modr   r   r   
initialize  s   r   ),
__future__r   r3   r   Z
mesonbuildr   r   r   Zmesonbuild.coredatar    r   r	   r
   r   r   r   Zinterpreterbaser   r   r   r   r   r   r   r   r)   r   Zinterpreter.type_checkingr   Zprogramsr   r   r   rJ   rS   rU   rV   r   r    r   rz   r   r   r   r   r   r   <module>   s0   (  BG