o
    f                     @   s  d Z ddlmZ dZddlZddlZejdk r&ddlmZ	 G dd de
ZnddlZd4d
dZedZedZedZedZedZeekrKd	Znejedd d Zedejdd	Zedd ejdd	 ZedejdeZedZedZedZedZdd Zdd Zdd Zd5d d!Z d"d# Z!d$d% Z"d6d'd(Z#d6d)d*Z$d7d,d-Z%d.d/ Z&d0d1 Z'e(d2kre'ej)d3d  dS dS )8z
Compile a Python script into an executable that embeds CPython.
Requires CPython to be built as a shared library ('libpythonX.Y').

Basic usage:

    python -m Cython.Build.BuildExecutable [ARGS] somefile.py
    )absolute_importTN)   	   )	sysconfigc                   @   s"   e Zd Zedd ZeejZdS )r   c                 C   s   | dksJ t  S )Ninclude)
_sysconfigget_python_inc)name r
   X/var/www/html/mig_web/myenv/lib/python3.10/site-packages/Cython/Build/BuildExecutable.pyget_path   s   zsysconfig.get_pathN)__name__
__module____qualname__staticmethodr   r   get_config_varr
   r
   r
   r   r      s    
r    c                 C   s   t | p|S N)r   r   )r	   defaultr
   r
   r   r       s   r   r   LIBDIRLIBPLLIBRARY	LDLIBRARYr   CCCFLAGS LINKCCLINKFORSHAREDLIBSSYSLIBSEXEc                 G   s(   t r|r| | } tj| d  d S d S )N
)DEBUGsysstderrwrite)msgargsr
   r
   r   _debug7   s
   r(   c                   C   s|   t dt t dt t dt t dt t dt t dt t dt t dt t d	t	 t d
t
 t dt t dt d S )Nz
INCDIR: %szLIBDIR1: %szLIBDIR2: %sz	PYLIB: %szPYLIB_DYN: %szCC: %sz
CFLAGS: %sz
LINKCC: %szLINKFORSHARED: %szLIBS: %szSYSLIBS: %szEXE_EXT: %s)r(   INCDIRLIBDIR1LIBDIR2PYLIB	PYLIB_DYNr   r   r   r   r   r   EXE_EXTr
   r
   r
   r   dump_config>   s   










r/   c                 C   sr   g }d }t | D ]'\}}|dr|| n|dv r!|| n|}| |d d  }  n|}qtd||| fS )N-)z-Xz--directive   zno input file provided)	enumerate
startswithappend
ValueError)r'   cy_argslast_argiarg
input_filer
   r
   r   _parse_argsM   s   

r;   c                 C   sR   |rd | } t|  ntd |  dd l}|j| |d}|r't| d S d S )Nr   r   shell)joinr(   
subprocesscallr#   exit)cmdr=   r?   
returncoder
   r
   r   runcmd`   s   

rD   c                 C   s\   t td| t | d dt dt gtrdt ptjtt	g t
  t  t   d S )N-o.oz-Lz-l)rD   r   r.   r*   r+   r-   ospathr>   r,   r   splitr   r   basenamer
   r
   r   clinkn   s    
rL   c                 C   s,   t tdd| d | d dt gt   d S )Nz-crE   rF   z.cz-I)rD   r   r)   r   rI   rJ   r
   r
   r   ccompilet   s   ,rM   r
   c                 C   sh   ddl m}m}m} |t|pdd| g \}}td|j|  |||}|j	dkr2t
d d S d S )N   )VersionCmdLineMainr
   z--embedzUsing Cython %s to compile %sr   r1   )CompilerrO   rP   rQ   parse_command_linelistr(   versioncompile
num_errorsr#   rA   )r:   optionsrO   rP   rQ   sourcesresultr
   r
   r   	cycompilex   s   
r[   c                 C   s"   t tj| gt| dd d S )NFr<   )rD   rG   rH   abspathrT   )program_namer'   r
   r
   r   	exec_file   s   "r^   Fc                 C   s   t j| d }|t }|st j|t j| krtd|s?t j|r?t j| r?t j| t j|kr?td| |S t	| | t
| t| |S )zi
    Build an executable program from a Cython module.

    Returns the name of the executable file.
    r   z?Input and output file names are the same, refusing to overwritez'File is up to date, not regenerating %s)rG   rH   splitextr.   r\   r5   existsgetmtimer(   r[   rM   rL   )r:   compiler_argsforcerK   exe_filer
   r
   r   build   s   

re   c                 C   s   t | \}} t||  dS )z
    Build an executable program from a Cython module and run it.

    Arguments after the module name will be passed verbatimly to the program.
    N)_buildr^   )r'   r]   r
   r
   r   build_and_run   s   rg   c                 C   s    t | \}}} t||}|| fS r   )r;   re   )r'   r:   r6   r]   r
   r
   r   rf      s   
rf   __main__r1   )r   )T)r
   )r
   F)*__doc__
__future__r   r"   r#   rG   version_info	distutilsr   r   objectr   r   r)   r*   r+   r,   r-   rH   r_   environgetr   r   r   r   r   r   r.   r(   r/   r;   rD   rL   rM   r[   r^   re   rg   rf   r   argvr
   r
   r
   r   <module>   sN    	







	

