o
    e                     @   sn  d Z ddlmZ dZddlZddlZddlmZ d0ddZe	 Z
ed	Zed
ZedZedZeekr8d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d1ddZdd Zd d! Zd2d#d$Z d2d%d&Z!d3d(d)Z"d*d+ Z#d,d- Z$e%d.kre$ej&d/d  dS dS )4z
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)	sysconfig c                 C   s   t | p|S N)r   get_config_var)namedefault r	   LD:\Projects\ConvertPro\env\Lib\site-packages\Cython/Build/BuildExecutable.pyr      s   r   ZLIBDIRZLIBPLZLIBRARYZ	LDLIBRARY   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
   _debug*   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_config1   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_argsZlast_argiarg
input_filer	   r	   r
   _parse_args@   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/   r1   
returncoder	   r	   r
   runcmdS   s   

r6   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)r6   r   r!   r   r   r    ospathr0   r   r   splitr   r   basenamer	   r	   r
   clinka   s    
r>   c                 C   s,   t tdd| d | d dt gt   d S )Nz-cr7   r8   z.cz-I)r6   r   r   r   r;   r<   r	   r	   r
   ccompileg   s   ,r?   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   r$   )ZCompilerrA   rB   rC   Zparse_command_linelistr   versioncompileZ
num_errorsr   r3   )r,   optionsrA   rB   rC   sourcesresultr	   r	   r
   	cycompilek   s   
rJ   c                 C   s"   t tj| gt| dd d S )NFr.   )r6   r9   r:   abspathrD   )program_namer   r	   r	   r
   	exec_filet   s   "rM   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)r9   r:   splitextr!   rK   r(   existsgetmtimer   rJ   r?   r>   )r,   Zcompiler_argsforcer=   Zexe_filer	   r	   r
   buildx   s   

rR   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)_buildrM   )r   rL   r	   r	   r
   build_and_run   s   rT   c                 C   s    t | \}}} t||}|| fS r   )r-   rR   )r   r,   r)   rL   r	   r	   r
   rS      s   
rS   __main__r$   )r   )T)r	   )r	   F)'__doc__
__future__r   r   r   r9   	distutilsr   r   Zget_python_incr   r   r   r   r    r:   rN   environgetr   r   r   r   r   r   r!   r   r"   r-   r6   r>   r?   rJ   rM   rR   rT   rS   __name__argvr	   r	   r	   r
   <module>   sH    	




	

