
    e                        d dl mZ 	 d dlZddlmZ ddlmZmZm	Z	 ddl
mZ ej                  rddlmZmZ dd	lmZ  G d
 de      Zy)    )annotationsN   )coredata)EnvironmentException	OptionKeyversion_compare   )Compiler)MutableKeyedOptionDictTypeKeyedOptionDictType)Environmentc                       e Zd ZdZdZ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 fdZddZ xZS )CythonCompilerzCython Compiler.cythonc                     y)NF selfs    =/usr/lib/python3/dist-packages/mesonbuild/compilers/cython.pyneeds_static_linkerz"CythonCompiler.needs_static_linker   s        c                    dgS )Nz--fast-failr   r   s    r   get_always_argszCythonCompiler.get_always_args   s
    r   c                    dgS )Nz-Werrorr   r   s    r   get_werror_argszCythonCompiler.get_werror_args    s
    {r   c                
    d|gS )Nz-or   )r   
outputnames     r   get_output_argszCythonCompiler.get_output_args#   s    j!!r   c                    g S Nr   )r   optimization_levels     r   get_optimization_argsz$CythonCompiler.get_optimization_args&   s	     	r   c                8    t        | j                  d      rdgS g S )Nz	>=0.29.33z-M)r   version)r   	outtargetoutfiles      r   get_dependency_gen_argsz&CythonCompiler.get_dependency_gen_args+   s    4<<56M	r   c                     y)Ndepr   r   s    r   get_depfile_suffixz!CythonCompiler.get_depfile_suffix0   s    r   c                    d}| j                  ||j                        5 }|j                  dk7  rt        d| j                  d      	 d d d        y # 1 sw Y   y xY w)Nzprint("hello world")r   zCython compiler z cannot compile programs)cached_compiler   
returncoder   id)r   work_direnvironmentcodeps        r   sanity_checkzCythonCompiler.sanity_check3   sc    %  {';';< 	c||q *-=dgg[H`+abb !	c 	c 	cs   )AAc                    g S r    r   )r   	buildtypes     r   get_buildtype_argsz!CythonCompiler.get_buildtype_args9       	r   c                    g S r    r   r   s    r   get_pic_argszCythonCompiler.get_pic_args=   r7   r   c                :    g }|D ]  }|j                  |        |S r    )append)r   parameter_list	build_dirnewis        r   &compute_parameters_with_absolute_pathsz5CythonCompiler.compute_parameters_with_absolute_pathsA   s(     	AJJqM	 
r   c           
     *   t         |          }|j                  t        d| j                  | j
                        t        j                  dddgd      t        d| j                  | j
                        t        j                  ddd	gd      i       |S )
Nr$   machinelangzPython version to target23languagezOutput C or C++ filesccpp)superget_optionsupdater   for_machinerG   r   UserComboOption)r   opts	__class__s     r   rK   zCythonCompiler.get_optionsI   s    w"$i)9)9NPXPhPh*c
Q
 j$*:*:OQYQiQi'eR
 	 r   c                   g }|t        d| j                  | j                           }|j                  d|j                          |t        d| j                  | j                           }|j                  dk(  r|j                  d       |S )Nr$   rB   -rG   rI   z--cplus)r   rM   rG   r;   value)r   optionsargskeyrD   s        r   get_option_compile_argsz&CythonCompiler.get_option_compile_argsY   st    i	43C3C$--XYa		{O$yT5E5EDMMZ[::KK	"r   )returnbool)rX   T.List[str])r   strrX   rZ   )r!   r[   rX   rZ   )r%   r[   r&   r[   rX   rZ   )rX   r[   )r/   r[   r0   z'Environment'rX   None)r5   r[   rX   rZ   )r<   rZ   r=   r[   rX   rZ   )rX   z'MutableKeyedOptionDictType')rT   z'KeyedOptionDictType'rX   rZ   )__name__
__module____qualname____doc__rG   r.   r   r   r   r   r"   r'   r*   r3   r6   r9   r@   rK   rW   __classcell__)rP   s   @r   r   r      sb    H	B"

c:=BM r   r   )
__future__r   typingT r   mesonlibr   r   r   	compilersr
   TYPE_CHECKINGr   r   r0   r   r   r   r   r   <module>ri      s7    # 0   G G ??J)NX Nr   