3
\                  @   s   d dl mZ d dlZd dlZd dlZd dlmZ ddlmZm	Z	 ddl
mZ ddlmZ yd dlZeej d	 ZW n ek
r   dZd ZY nX G d
d deZdd Zdd Zdd Zdd Zdd Zdd Zdd ZdddZedkre  dS )    )absolute_importN)setup   )	cythonizeextended_iglob   )is_package_dir)Optionsg      ?c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
	_FakePoolc             C   sB   yddl m} W n tk
r(   t}Y nX x|||D ]}q6W d S )Nr   )imap)	itertoolsr   ImportErrormap)selffuncargsr   _ r   f/home/psgendb/BIRCHDEV/lib-linux-x86_64/python/lib64/python3.6/site-packages/Cython/Build/Cythonize.py	map_async   s    
z_FakePool.map_asyncc             C   s   d S )Nr   )r   r   r   r   close   s    z_FakePool.closec             C   s   d S )Nr   )r   r   r   r   	terminate"   s    z_FakePool.terminatec             C   s   d S )Nr   )r   r   r   r   join%   s    z_FakePool.joinN)__name__
__module____qualname__r   r   r   r   r   r   r   r   r
      s   r
   c             C   s>   | j }tt|j|tj }tj|d|d}t|j|| d S )NT)relaxed_boolcurrent_settings)destdictgetattrvaluesr	   get_directive_defaultsparse_directive_listsetattr)optionnamevalueparserr   Zold_directives
directivesr   r   r   parse_directives)   s    
r*   c       	      C   sv   | j }tt|j|i }xJ|jdD ]<}d|krN|jdd\}}|j d	k}n
|d }}|||< q$W t|j|| d S )
N,=r   falsef0noT)r-   r.   r/   r0   )r   r   r    r!   splitlowerr$   )	r%   r&   r'   r(   r   optionsoptnvr   r   r   parse_options2   s    
r7   c             C   s8   | j }tt|j|i }tj||d}t|j|| d S )N)r   )r   r   r    r!   r	   parse_compile_time_envr$   )r%   r&   r'   r(   r   Zold_envZnew_envr   r   r   r8   ?   s    r8   c             C   sP   t jj| \}}x6t jjt jj|drFt jj|\}}d||f }qW ||fS )Nz__init__.pyz%s/%s)ospathr1   isfiler   )r:   base_dirpackage_pathparentr   r   r   find_package_baseF   s
    r?   c                s~  d }t tjjt| }y&x|D ]}|jr\| x,tjj  sJt rXtjj  q4W nd  tjj|rtjj	|ddg}n|g}t
|f|j|j|j|j|j|j|jd|j}|o|jr"t|dko|jdkr,|d krytj|j}W n tk
r   t }Y nX |jt fdd|D  q"t |f q"W W n    |d k	rX|j   Y nX |d k	rz|j  |j	  d S )Nz**z
*.{py,pyx})nthreadsexclude_failuresexcludecompiler_directivescompile_time_envforcequietr   c                s   g | ]} |gfqS r   r   ).0ext)r<   r   r   
<listcomp>t   s    z"cython_compile.<locals>.<listcomp>)r   r9   r:   abspathr   build_inplaceisdirr   dirnamer   r   parallel
keep_goingexcludesr)   rD   rE   rF   r3   buildlenmultiprocessingPoolOSErrorr
   r   run_distutilsr   r   )Zpath_patternr3   poolZ	all_pathsr:   pathsext_modulesr   )r<   r   cython_compileN   sN    




rZ   c             C   s   | \}}ddg}t j }d }z:|rFt j| tj|d}|jd|g td||d W d |rt j| |rt jj|rt	j
| X d S )N	build_extz-i)dirz--build-tempzsetup.py)script_namescript_argsrY   )r9   getcwdchdirtempfilemkdtempextendr   r:   rL   shutilrmtree)r   r<   rY   r^   cwdZtemp_dirr   r   r   rV      s"    

rV   c             C   s  ddl m} |dd}|jddddi d	d
tdd	 |jddddi d	d
tdd	 |jddddi d	d
tdd	 |jddddd dd |jdddddd |jd ddd!dd |jd"d#d$d%d&d' |jd(d)d*d+d,g d-d. |jd/d0d1d%d2d' |jd3d4d5d%d6d' |jd7d8d9d:ttd;t pd<d= |jd>d?d@d%dAd' |jdBdCdDd%dEd' |jdFdGd%dHd' |jdIdJdKd%dLd' |j| \}} | s|j	dM |j
rdN|_td krd|_|jr|jdOkst|j|jd< || fS )PNr   )OptionParserz'%prog [options] [sources and packages]+)usagez-Xz--directivezNAME=VALUE,...r)   strcallbackzset a compiler directive)metavarr   defaulttypeactionrj   helpz-Ez--compile-time-envrD   z'set a compile time environment variablez-sz--optionz
NAME=VALUEr3   zset a cythonize optionz-2language_levelZstore_constr   z#use Python 2 syntax mode by default)r   rn   constrl   ro   z-3   z#use Python 3 syntax mode by default)r   rn   rq   ro   z--3str3strz-az
--annotateannotate
store_truez-generate annotated HTML page for source files)r   rn   ro   z-xz	--excludeZPATTERNrP   appendz2exclude certain file patterns from the compilation)rk   r   rn   rl   ro   z-bz--buildrQ   z'build extension modules using distutilsz-iz	--inplacerK   z=build extension modules in place using distutils (implies -b)z-jz
--parallelrN   Nz+run builds in N parallel jobs (default: %d)r   )r   rk   rm   rl   ro   z-fz--forcerE   zforce recompilationz-qz--quietrF   z"be less verbose during compilationz	--lenientlenientzBincrease Python compatibility by ignoring some compile time errorsz-kz--keep-goingrO   z8compile as much as possible, ignore compilation failureszno source files providedT)r   rr   rs   )optparserg   
add_optionr*   r8   r7   intparallel_compiles
parse_argserrorrK   rQ   rS   rN   rp   AssertionErrorr3   )r   rg   r(   r3   r   r   r   r}      sh    






r}   c             C   sF   t | \}}|jrdt_dt_|jr*dt_x|D ]}t|| q0W d S )NFT)r}   rx   r	   error_on_unknown_nameserror_on_uninitializedrt   rZ   )r   r3   rX   r:   r   r   r   main   s    
r   __main__)N)
__future__r   r9   rd   ra   distutils.corer   Dependenciesr   r   Utilsr   Compilerr	   rS   r{   	cpu_countr|   r   objectr
   r*   r7   r8   r?   rZ   rV   r}   r   r   r   r   r   r   <module>   s0   
	3<
