a
    b                     @   s\  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	 Z
ed	Zed
ZedZedZeekrpd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dZdd Zdd Zd.d!d"Zd/d#d$Z d0d&d'Z!d(d) Z"e#d*krXe"ej$d+d  dS )1z
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 | p|S )N)r   get_config_var)namedefault r   l/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/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| 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   sp   |rd | } t|  ntd |  zdd l}W n tyN   t| }Y n0 |j| |d}|rlt| d S )Nr   r   shell)	joinr   
subprocessImportErrorossystemcallr   exit)cmdr'   r)   
returncoder   r   r	   runcmd=   s    

r1   c                 C   s\   t td| t | d dt dt gtr,dt p8tjtt	g t
  t  t   d S )N-o.oz-Lz-l)r1   r   r$   r    r!   r#   r+   pathr(   r"   r   splitr   r   basenamer   r   r	   clinkN   s     r8   c                 C   s,   t tdd| d | d dt gt   d S )Nz-cr2   r3   z.cz-I)r1   r   r   r   r5   r6   r   r   r	   ccompileS   s    r9   r   c                 C   sd   ddl m}m}m} |t|p dd| g \}}td|j|  |||}|j	dkr`t
d d S )N   )VersionCmdLineMainr   z--embedzUsing Cython %s to compile %sr      )ZCompilerr;   r<   r=   parse_command_linelistr   versioncompileZ
num_errorsr   r.   )
input_fileoptionsr;   r<   r=   sourcesresultr   r   r	   	cycompileV   s    
rG   c                 C   s"   t tj| gt| dd d S )NFr&   )r1   r+   r4   abspathr@   )program_namer   r   r   r	   	exec_file^   s    rJ   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)r+   r4   splitextr$   rH   
ValueErrorexistsgetmtimer   rG   r9   r8   )rC   Zcompiler_argsforcer7   Zexe_filer   r   r	   builda   s    

rP   c                 C   s   g }d}t | D ]N\}}|dr.|| n,|dv rB|| n|}| |d d }  qh|}q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-)z-Xz--directiver>   zno input file provided)	enumerate
startswithappendrL   rP   rJ   )r   Zcy_argsZlast_argiargrC   rI   r   r   r	   build_and_runt   s    

rW   __main__r>   )r   )T)r   )r   )r   F)%__doc__
__future__r   r   r   r+   	distutilsr   r   get_python_incr   r    r!   r"   r#   r4   rK   environgetr   r   r   r   r   r   r$   r   r%   r1   r8   r9   rG   rJ   rP   rW   __name__argvr   r   r   r	   <module>   s@   	






