3
ԼY                 @   sd  d Z ddlmZ dZddlZddlZddlmZ d+ddZej	 Z
ed	Zed
ZedZedZeekrpdZnejjedd d ZedejjddZedd ejjdd ZedejjdeZedZedZedZejdZdd Zdd Zd,ddZdd Zdd Zf fd d!Zf fd"d#Z f d$fd%d&Z!d'd( Z"e#d)kr`e"ej$d*d  dS )-z
Compile a Python script into an executable that embeds CPython and run it.
Requires CPython to be built as a shared library ('libpythonX.Y').

Basic usage:

    python cythonrun somefile.py [ARGS]
    )absolute_importTN)	sysconfig c             C   s   t j| p|S )N)r   get_config_var)namedefault r   l/home/psgendb/BIRCHDEV/lib-linux-x86_64/python/lib64/python3.6/site-packages/Cython/Build/BuildExecutable.pyr      s    r   LIBDIRLIBPLLIBRARY	LDLIBRARY   CCCFLAGS LINKCCLINKFORSHAREDLIBSSYSLIBSEXEc             G   s$   t r |r| | } tjj| d  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_config/   s    










r%   c             C   sr   |rdj | } t|  ntdj |  ydd l}W n tk
rP   tj| }Y nX |j| |d}|rntj| d S )Nr   r   )shell)	joinr   
subprocessImportErrorossystemcallr   exit)cmdr&   r(   
returncoder   r   r	   runcmd=   s    

r0   c             C   s\   t td| t | d dt dt gtr,dt p8tjjtt	g t
j  tj  tj   d S )Nz-oz.oz-Lz-l)r0   r   r$   r    r!   r#   r*   pathr'   r"   r   splitr   r   )basenamer   r   r	   clinkN   s    r4   c             C   s,   t tdd| d | d dt gtj   d S )Nz-cz-oz.oz.cz-I)r0   r   r   r   r2   )r3   r   r   r	   ccompileS   s    r5   c             C   sd   ddl m}m}m} |jt|p f d| g \}}td|j|  |j||}|j	dkr`t
jd d S )N   )VersionCmdLineMainz--embedzUsing Cython %s to compile %sr      )Compilerr7   r8   r9   parse_command_linelistr   versioncompile
num_errorsr   r-   )
input_fileoptionsr7   r8   r9   sourcesresultr   r   r	   	cycompileV   s    
rE   c             C   s"   t tjj| gt| dd d S )NF)r&   )r0   r*   r1   abspathr=   )program_namer   r   r   r	   	exec_file^   s    rH   Fc             C   s   t jj| d }|t }| r>t jj|t jj| kr>td| rt jj|rt jj| rt jj| t jj|krt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)r*   r1   splitextr$   rF   
ValueErrorexistsgetmtimer   rE   r5   r4   )rA   Zcompiler_argsforcer3   Zexe_filer   r   r	   builda   s    

rN   c             C   s   g }d}x`t | D ]L\}}|jdr0|j| n*|dkrD|j| n|}| |d d } P |}qW tdt||}t||  dS )z
    Build an executable program from a Cython module and runs it.

    Arguments after the module name will be passed verbatimely to the
    program.
    N--X--directiver:   zno input file provided)rP   rQ   )	enumerate
startswithappendrJ   rN   rH   )r   Zcy_argsZlast_argiargrA   rG   r   r   r	   build_and_runt   s    

rW   __main__r:   )r   )T)%__doc__
__future__r   r   r   r*   	distutilsr   r   get_python_incr   r    r!   r"   r#   r1   rI   environgetr   r   r   r   r   r   r$   r   r%   r0   r4   r5   rE   rH   rN   rW   __name__argvr   r   r   r	   <module>   s@   



