o
    uJAf?                     @  s  U d dl mZ d dlmZ d dl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mZmZmZmZmZmZmZ ddlmZ ddlmZmZmZmZmZ ddlm Z  ddl!m"Z" ej#rd dl$m%Z%m&Z& ddlm'Z' ddlm(Z( ddl)m*Z* ddlm+Z+ G dd de&Z,G dd de&Z-G dd de&Z.edee/e0g ddZ1de2d< edee/e0g ddZ3de2d < d!g d"iZ4G d#d$ d$eZ5d*d(d)Z6dS )+    )annotations)pathN   )ExtensionModuleModuleReturnValue
ModuleInfo   )build)mesonlib)mlog)CT_BUILD_BY_DEFAULTCT_INPUT_KWINSTALL_TAG_KW	OUTPUT_KWINSTALL_DIR_KW
INSTALL_KWNoneTypein_set_validator)
FeatureNew)ContainerTypeInfo	KwargInfo	noPosargstyped_kwargstyped_pos_args)ExternalProgram)read_linguas)Literal	TypedDict)ModuleState)Target)Interpreter)TYPE_varc                   @  s^   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S )	MergeFileT.List[T.Union[str, build.BuildTarget, build.CustomTarget, build.CustomTargetIndex, build.ExtractedObjects, build.GeneratedList, ExternalProgram, mesonlib.File]]inputstroutputboolbuild_by_defaultinstallT.Optional[str]install_dirinstall_tagT.List[str]args	data_dirspo_dirzLiteral['xml', 'desktop']typeN__name__
__module____qualname____annotations__ r7   r7   </usr/lib/python3.10/site-packages/mesonbuild/modules/i18n.pyr"   &   s   
 r"   c                   @  s>   e Zd ZU ded< ded< ded< ded< ded< ded	< d
S )Gettextr-   r.   r/   r'   r)   r*   r+   	languagespresetNr2   r7   r7   r7   r8   r9   6   s   
 r9   c                   @  sN   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S )ItsJoinFiler#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   	its_fileszOT.List[T.Union[build.BuildTarget, build.CustomTarget, build.CustomTargetIndex]]
mo_targetsNr2   r7   r7   r7   r8   r<   ?   s   
 r<   r.   TdefaultlistifyzKwargInfo[T.List[str]]_ARGSr/   
_DATA_DIRSZglib)z--from-code=UTF-8z--add-commentsz--keyword=_z--keyword=N_z--keyword=C_:1c,2z--keyword=NC_:1c,2z--keyword=g_dcgettext:2z--keyword=g_dngettext:2,3z--keyword=g_dpgettext2:2c,3z--flag=N_:1:pass-c-formatz--flag=C_:2:pass-c-formatz--flag=NC_:2:pass-c-formatz"--flag=g_dngettext:2:pass-c-formatz!--flag=g_strdup_printf:1:c-formatz!--flag=g_string_printf:2:c-formatz(--flag=g_string_append_printf:2:c-formatz--flag=g_error_new:3:c-formatz--flag=g_set_error:4:c-formatz)--flag=g_markup_printf_escaped:1:c-formatz--flag=g_log:3:c-formatz--flag=g_print:1:c-formatz--flag=g_printerr:1:c-formatz--flag=g_printf:1:c-formatz--flag=g_fprintf:2:c-formatz--flag=g_sprintf:2:c-formatz--flag=g_snprintf:3:c-formatc                      sh  e Zd ZedZd5 fddZed6ddZedde	e
deeedeefeeeejddejddededdedededdhdd7d d!Zed"ee
d"eejd#dejdd$ejd%ded&eeeg dd'ed(eefeeedd)d8d,d-Zed.d/e	e
d.eeedeefeeee ed0eeeed1eeej dd
d9d3d4Z!  Z"S ):
I18nModulei18ninterpreter'Interpreter'c                   s<   t  | | j| j| j| jd d d d d d d| _d S )N)
merge_filegettextitstool_join)itstoolmsgfmtmsginitmsgmergexgettext)super__init__methodsupdaterH   rI   rJ   tools)selfrF   	__class__r7   r8   rQ      s   zI18nModule.__init__state'ModuleState'dirsT.Iterable[str]returnr-   c                   s&   t | j | j  fdd|D S )z,Returns source directories of relative pathsc                   s   g | ]}t  |qS r7   )r   join).0dsrc_dirr7   r8   
<listcomp>   s    z-I18nModule._get_data_dirs.<locals>.<listcomp>)r   r]   environmentget_source_dirsubdir)rX   rZ   r7   r`   r8   _get_data_dirs   s   zI18nModule._get_data_dirszi18n.merge_filez0.37.0r+   z0.51.0)sincez0.41.0r0   T)requiredr1   xmldesktop)r@   	validatorr.   T.List['TYPE_var']kwargs'MergeFile'r   c                 C  s  | j d d u s| j d  s|jdtjjd| j d< t| j d trdz	| j d  }W n tj	y> } zt	d|d }~ww |d dkrGdnd}t
||sdd| d	|d  d
| d }t	|t|j|j|d }| ||d }	|	rdd|	 nd }
g }||j  |ddd| j d   g |
r||
 |dd|d |g |d r|d ||d  |d }|d u r|d }|d d ur|d gnd }tjd|j|j|j||d |d g||d |d d ur|d gnd |dd}t||gS ) NrL   for_machinez#i18n.merge_file requires GNU msgfmtr1   rj   z>=0.19z>=0.19.7z$i18n.merge_file requires GNU msgfmt z to produce files of type: z (got: )r0   r/   --datadirs=:
--internalZmsgfmthelperz	--msgfmt=@INPUT@@OUTPUT@r.   --r(   r)   r,    r$   r&   r+   Merging translations for {})r(   r)   r+   r,   description)rT   foundfind_programr
   MachineChoiceBUILD
isinstancer   get_versionMesonExceptionversion_comparer   r]   build_to_srcre   rf   extendrc   get_build_commandget_pathappendr	   CustomTarget
subprojectr   )rU   rX   r.   rm   Zhave_versioneZwant_versionmsgZpodirZddirsdatadirscommandr(   r,   ctr7   r7   r8   rH      s`    


zI18nModule.merge_filezi18n.gettextz0.36.0)r@   z0.50.0r:   r?   r;   )rk   rg   T.Tuple[str]	'Gettext'c                 C  s  dD ]>\}}| j | d u r|j|dtjjd| j |< | j |  s@|r3tjdd|jd t	d g   S tj|ddd|jd q|d	 }d
| }|d }|rWdd
| nd }	d
| ||d }
|
rkd|
 nd }|d }g }g }|d }|rt| }tt|| }|rdd
| nd }t
|j|j}|jrtj|j|jdnd }|j ddd|g }|d|  |r|d|  |r|| |r|| | j d  r|d| j d    tj|d |g |j|j|jdd}|| |d }|d p|jjtd }t|tsJ d!|s(t t
|jj!|j}|D ]K}tj"#|jj!|j|d" }tj$| d#| d$t
|j|d%|j|j| j d& d'd(d)g|g| d$g|t
||d%gd*gd+d,}|| || q*t%|d- ||j|j|j}|| |j ddd.|g }|d|  |r|d|  |	r||	 |r|| |r|| d/D ]}| j |  r|d0| d1| j |    qtj|d2 |g |j|j|jdd}|| t	|||g|S )3N))rL   T)rM   F)rN   F)rO   FF)rh   rp   z@Gettext not found, all translation (po) targets will be ignored.T)oncelocationz, not found, maintainer targets will not work)r   fatalr   r   z
--pkgname=r:   z--langs=z@@rs   r/   rr   r.   r;   z--extra-args=)startrt   rI   Zpotz--source-root=z	--subdir=rO   z--xgettext=z-pot)default_envr)   r+   	localedirzfor mypyz.po-z.moLC_MESSAGESrL   -orv   ru   rE   zBuilding translation {})r)   r+   r,   rz   z-gmoZ	update_po)rM   rN   rw   =z
-update-po)&rT   r|   r
   r}   r~   r{   r   warningcurrent_noder   r]   rf   PRESET_ARGSlist
OrderedSetr   source_rootroot_subdirre   relpathrc   r   r   r   r	   	RunTargetr   coredata
get_option	OptionKeyr   r%   r   
source_dirFilefrom_source_filer   AliasTarget)rU   rX   r.   rm   toolstrictpackagenameZpkg_argr:   Zlang_argZ	_datadirsr   
extra_argstargetsZ
gmotargetsr;   Zpreset_args	extra_argr   re   ZpotargsZ	pottargetr)   r+   lZpo_fileZ	gmotargetZallgmotargetZupdatepoargsZupdatepotargetr7   r7   r8   rI      s   










 
zI18nModule.gettextzi18n.itstool_joinz0.62.0r=   r>   'ItsJoinFile'c                 C  s  | j d d u r|jdtjjd| j d< |d }|dg }g }|D ]}|t|	 |
 d  q!g }||j  | j d  }	|ddddd	d
ddddd |	D  g |rx|D ]}
t|
spt|jj|j|
}
|d|
g q_|| |d }|d u r|d }|d d ur|d gnd }tjd|j|j|j||d |d g|||d |d d ur|d gnd |dd}t||gS )NrK   ro   r>   r=   r   rt   r]   z-iru   r   rv   z
--itstool= c                 s  s    | ]}t |V  qd S N)shlexquote)r^   cr7   r7   r8   	<genexpr>s  s    z*I18nModule.itstool_join.<locals>.<genexpr>z--itsr(   r)   r,   rx   r$   r&   r+   ry   )r(   extra_dependsr)   r+   r,   rz   )rT   r|   r
   r}   r~   getr   r   r]   
get_subdirget_outputsr   rc   r   get_commandisabsr   re   r	   r   r   r   )rU   rX   r.   rm   r>   r=   Z	mo_fnamestargetr   Zitstool_cmdfnamer(   r,   r   r7   r7   r8   rJ   Q  sV    

zI18nModule.itstool_join)rF   rG   )rX   rY   rZ   r[   r\   r-   )rX   rY   r.   rl   rm   rn   r\   r   )rX   rY   r.   r   rm   r   r\   r   )rX   rY   r.   rl   rm   r   r\   r   )#r3   r4   r5   r   INFOrQ   staticmethodrf   r   r   r   r   r   r   r%   r   r   r   r   rB   evolverC   r   rH   r   r   r   r   setr   rI   r	   r   rJ   __classcell__r7   r7   rV   r8   rD      sh    

6



erD   interprG   r\   c                 C  s   t | S r   )rD   )r   r7   r7   r8   
initialize  s   r   )r   rG   r\   rD   )7
__future__r   osr   r   typingTrx   r   r   r   r	   r
   r   Zinterpreter.type_checkingr   r   r   r   r   r   r   r   interpreterbaser   interpreterbase.decoratorsr   r   r   r   r   programsr   Zscripts.gettextr   TYPE_CHECKINGZtyping_extensionsr   r   r   r   rF   r    r!   r"   r9   r<   r   r%   rB   r6   rC   r   rD   r   r7   r7   r7   r8   <module>   sP   (	#  