o
    i)                     @   s   d dl mZ d dlmZ d dlmZ d dlZd dlZd dl	Z	d dl
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 ejZejZe ZG d
d deZG dd deZdS )    )	distutils)	build_ext)	ExtensionN)typingsigutils)global_compiler_lock)ModuleCompilerExportEntry)	Toolchain)cextc                   @   s  e Zd ZdZdge Zi Zi Zd+ddZe	dd Z
e	dd	 Zejd
d	 Ze	dd Zejdd Ze	dd Zejdd Ze	dd Zejdd Ze	dd Zejdd Zdd Ze	dd Zdd Zdd Zdd  Zd!d" Zd#d$ Zed%d& Zed'd( Zd)d* ZdS ),CCz_
    An ahead-of-time compiler to create extension modules that don't
    depend on Numba.
    zmodulemixin.cNc                 C   s   d|v rt d|| _d| | _i | _td}|d u r$|j}|d }nt|dr0|j}|j	}ntj
| j}|dd| _|| _t | _d| _tj| j| _| j|| _d	| _d| _d S )
N.z;basename should be a simple module name, not qualified nameZ
pycc_init_   __name____file__ FT)
ValueError	_basename_init_function_exported_functionssys	_getframe	f_globalshasattr__dict__r   modulesget_source_path_source_moduler
   
_toolchain_verboseospathdirname_output_dirZget_ext_filename_output_file_use_nrt_target_cpu)selfZextension_nameZsource_modulefdct r+   \/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/numba/pycc/cc.py__init__/   s*   




zCC.__init__c                 C      | j S )z=
        The name of the extension module to create.
        )r   r(   r+   r+   r,   nameL      zCC.namec                 C   r.   )zJ
        The specific output file (a DLL) that will be generated.
        r%   r/   r+   r+   r,   output_fileS   r1   zCC.output_filec                 C   
   || _ d S Nr2   r(   valuer+   r+   r,   r3   Z      
c                 C   r.   )z?
        The directory the output file will be put in.
        r$   r/   r+   r+   r,   
output_dir^   r1   zCC.output_dirc                 C   r4   r5   r9   r6   r+   r+   r,   r:   e   r8   c                 C   r.   r5   r&   r/   r+   r+   r,   use_nrti   s   z
CC.use_nrtc                 C   r4   r5   r;   r6   r+   r+   r,   r<   m   r8   c                 C   r.   )z;
        The target CPU model for code generation.
        r'   r/   r+   r+   r,   
target_cpuq   r1   zCC.target_cpuc                 C   r4   r5   r=   r6   r+   r+   r,   r>   x   r8   c                 C   r.   )zI
        Whether to display detailed information when compiling.
        r    r/   r+   r+   r,   verbose|   r1   z
CC.verbosec                 C   r4   r5   r?   r6   r+   r+   r,   r@      r8   c                    sJ   t \}}tj|g|R   jv rtd   fdd}|S )zH
        Mark a function for exporting in the extension module.
        zduplicated export symbol %sc                    s   t  | }|j < | S r5   )r	   r   )funcentryexported_namer(   sigr+   r,   	decorator   s   
zCC.export.<locals>.decorator)r   Znormalize_signaturer   	signaturer   KeyError)r(   rD   rE   Zfn_argsZfn_rettyrF   r+   rC   r,   export   s   
z	CC.exportc                 C   s   t | j dd dS )Nc                 S   r.   r5   )symbol)rB   r+   r+   r,   <lambda>   s    z$CC._export_entries.<locals>.<lambda>)key)sortedr   valuesr/   r+   r+   r,   _export_entries   s   
zCC._export_entriesc                    s<   t jt | jd d  }| jr|d  fdd|D S )Nz../core/runtime/nrt.cppc                    s   g | ]	}t j |qS r+   )r!   r"   join).0r)   herer+   r,   
<listcomp>   s    z)CC._get_mixin_sources.<locals>.<listcomp>)r!   r"   r#   r   _mixin_sourcesr&   append)r(   Zmixin_sourcesr+   rR   r,   _get_mixin_sources   s
   
zCC._get_mixin_sourcesc                 C   s   d| j fdt| jfgS )NZPYCC_MODULE_NAMEZPYCC_USE_NRT)r   intr&   r/   r+   r+   r,   _get_mixin_defines   s   zCC._get_mixin_definesc                 C   s(   | j tjg }|s| j tjg }|S r5   )_extra_cflagsr   r   platformr!   r0   )r(   extra_cflagsr+   r+   r,   _get_extra_cflags   s   zCC._get_extra_cflagsc                 C   sF   | j tjg }|s| j tjg }tjdr!d|vr!|d |S )Nlinuxz-pthread)_extra_ldflagsr   r   r[   r!   r0   
startswithrV   )r(   extra_ldflagsr+   r+   r,   _get_extra_ldflags   s   
zCC._get_extra_ldflagsc                 C   s<   |   }|  }| j }|  }| jj|||||d}|S )N)include_dirsmacrosr\   )rW   rY   r   get_python_include_dirsr]   Zcompile_objects)r(   	build_dirsourcesrd   rc   r\   objectsr+   r+   r,   _compile_mixins   s   

zCC._compile_mixinsc                 C   sj   t | j| j| j| jd}| j|_tj	|tj
| jd d }td| j| |j|dd |g|jfS )N)Zcpu_namer   z.oz%generating LLVM code for '%s' into %sT)wrap)r   rO   r   r&   r'   r   Zexternal_init_functionr!   r"   rP   splitextr%   loginfoZwrite_native_objectdll_exports)r(   rf   compilerZtemp_objr+   r+   r,   _compile_object_files   s   
zCC._compile_object_filesc                 C   s   | j | j_ tjd| j d}| |\}}|| |7 }|  }tj	
| j| j}| j }| j }| jj||||||d t| dS )z/
        Compile the extension module.
        zpycc-build-%s-)prefix)Zexport_symbolsra   N)r@   r   tempfilemkdtempr   rp   ri   rb   r!   r"   rP   r$   r%   get_python_librariesget_python_library_dirsZlink_sharedshutilrmtree)r(   rf   rh   rn   ra   Z
output_dll	librarieslibrary_dirsr+   r+   r,   compile   s   



z
CC.compilec                 K   s   | dg |   }| dg | jg }| dg |   }| dg |   }| dg | j  }| dg | j  }| dg | j  }| j	d| j	
d	d
  }	td|	| j |  |||||||d	|}
|
  | |
_|
S )z`
        Create a distutils extension object that can be used in your
        setup.py.
        rd   dependsextra_compile_argsextra_link_argsrc   rx   ry   Nr   r   )	r0   rg   r{   Zdefine_macrosrc   rx   ry   r|   r}   r+   )poprY   r   r]   rb   r   re   rt   ru   r   rfind_CCExtensionr   rW   monkey_patch_distutils_cc)r(   kwargsrd   r{   r|   r}   rc   rx   ry   Zpython_package_pathextr+   r+   r,   distutils_extension   sB   




	
zCC.distutils_extensionr5   )r   
__module____qualname____doc__extension_libsrU   rZ   r_   r-   propertyr0   r3   setterr:   r<   r>   r@   rI   rO   rW   rY   r]   rb   ri   r   rp   rz   r   r+   r+   r+   r,   r      sR    
















r   c                   @   s,   e Zd ZdZdZdZdd Zedd ZdS )r   zj
    A Numba-specific Extension subclass to LLVM-compile pure Python code
    to an extension module.
    NFc                 C   sL   | j }ttjj|jg| jdd d R   |	|j\}}|| _
d S )Nr   )r   dir_utilZmkpathr!   r"   rP   Z
build_tempr0   splitrp   Zextra_objects)r(   r   ccrh   _r+   r+   r,   _prepare_object_files  s   ,
z"_CCExtension._prepare_object_filesc                    s4   | j rdS tj G  fddd }|t_d| _ dS )z}
        Monkey-patch distutils with our own build_ext class knowing
        about pycc-compiled extensions modules.
        Nc                       s   e Zd Z fddZdS )z:_CCExtension.monkey_patch_distutils.<locals>._CC_build_extc                    s$   t |tr
||   | | d S r5   )
isinstancer   r   build_extension)r(   r   Z_orig_build_extr+   r,   r   -  s   

zJ_CCExtension.monkey_patch_distutils.<locals>._CC_build_ext.build_extensionN)r   r   r   r   r+   r   r+   r,   _CC_build_ext+  s    r   T)_distutils_monkey_patchedr   )clsr   r+   r   r,   r      s   
z#_CCExtension.monkey_patch_distutils)	r   r   r   r   r   r   r   classmethodr   r+   r+   r+   r,   r     s    r   )
setuptoolsr   ZdutilsZsetuptools.commandr   Zsetuptools.extensionr   r!   rv   r   rr   Z
numba.corer   r   Znumba.core.compiler_lockr   Znumba.pycc.compilerr   r	   Znumba.pycc.platformr
   Znumbar   r   rl   Zget_extension_libsr   objectr   r   r+   r+   r+   r,   <module>   s$     {