o
    uJAfJ                     @  s   d dl mZ 	 d dlZd dlZ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 ejrCdd	lmZ dd
lmZ ddlmZ neZdddZG dd deZdS )    )annotationsN   )coredata)mesonlib)	OptionKey)LibType)CompileCheckMode)Environment)Compiler)
DependencyargsT.List[str]returnc                 C  s>   g }| D ]}| dr|ds|d|g7 }q||g7 }q|S )N.js-z--js-library)endswith
startswith)r   
final_argsi r   K/usr/lib/python3.10/site-packages/mesonbuild/compilers/mixins/emscripten.pywrap_js_includes'   s   r   c                      sh   e Zd Zd!ddZd"ddZd# fddZed$ fddZd% fddZe	j
dfd& fdd Z  ZS )'EmscriptenMixindirnamestrmoder   r   c                 C  s8   |t jks	J d|t jkrd}nd}tj|d| S )NzAIn pre-processor mode, the output is sent to stdout and discardedjsozoutput.)r   
PREPROCESSLINKospathjoin)selfr   r   suffixr   r   r   _get_compile_output2   s
   
z#EmscriptenMixin._get_compile_outputenv'Environment'r   c                 C  s:   dg}|j jtd| j| jd j}|r|d|  |S )Nz-pthreadthread_count)langmachinez-sPTHREAD_POOL_SIZE=)r   optionsr   languagefor_machinevalueappend)r#   r&   r   countr   r   r   thread_link_flags=   s
   z!EmscriptenMixin.thread_link_flags%'coredata.MutableKeyedOptionDictType'c                   s6   t   }td| j| jd}||tddi |S )Nr(   )r*   r)   z=Number of threads to use in web assembly, set to 0 to disable)r   N   )superget_optionsr   r-   r,   updater   UserIntegerOption)r#   optskey	__class__r   r   r5   D   s   
zEmscriptenMixin.get_optionsr   c                      t t |S N)r   r4   native_args_to_unix)clsr   r:   r   r   r>   P   s   z#EmscriptenMixin.native_args_to_unixdep'Dependency'c                   r<   r=   )r   r4   get_dependency_link_args)r#   r@   r:   r   r   rB   T   s   z(EmscriptenMixin.get_dependency_link_argsTlibname
extra_dirslibtyper   lib_prefix_warningboolT.Optional[T.List[str]]c                   s   | dst |||||S tj|rtj|r|gS t|dkr)t	d|D ]}tj
||}tj|r?|g  S q+d S )Nr   r   z]Looking up Emscripten JS libraries requires either an absolute path or specifying extra_dirs.)r   r4   find_libraryr    r!   isabsexistslenr   EnvironmentExceptionr"   )r#   rC   r&   rD   rE   rF   dabs_pathr:   r   r   rI   W   s   


zEmscriptenMixin.find_library)r   r   r   r   r   r   )r&   r'   r   r   )r   r2   r   r   r   r   )r@   rA   r   r   )rC   r   r&   r'   rD   r   rE   r   rF   rG   r   rH   )__name__
__module____qualname__r%   r1   r5   classmethodr>   rB   r   PREFER_SHAREDrI   __classcell__r   r   r:   r   r   0   s    

r   rP   )
__future__r   os.pathr    typingT r   r   r   r   Zmesonbuild.compilers.compilersr   TYPE_CHECKINGenvironmentr	   Zcompilers.compilersr
   dependenciesr   objectr   r   r   r   r   r   <module>   s    
	