B
    d                  @   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 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   c/work/yifan.wang/ringdown/master-ringdown-env/lib/python3.7/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 }tj|d|d}t|j|| d S )NT)Zrelaxed_boolcurrent_settings)destdictgetattrvaluesr	   Zget_directive_defaultsZ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|dD ]<}d|krN|dd\}}| dk}n
|d }}|||< q$W t|j|| d S )N,=r   )falsef0noT)r   r   r   r    splitlowerr!   )	r"   r#   r$   r%   r   optionsoptnvr   r   r   parse_options2   s    
r4   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   r5   ?   s    r5   c             C   sP   t j| \}}x6t jt j|drFt j|\}}d||f }qW ||fS )Nz__init__.pyz%s/%s)ospathr.   isfiler   )r7   base_dirpackage_pathparentr   r   r   find_package_baseF   s
    r<   c                s  d }t tjjt| }y*x"|D ]}|jrZ| x*tj rHt rVtj  q4W nd  tj|r~tj	|ddg}n|g}t
|f|j|j|j|j|j|j|j|jd|j}|r"|jr"t|dkr0|jdkr0|d kryt|j}W n tk
r   t }Y nX |t fdd|D  q"t |f q"W W n    |d k	r\|   Y nX |d k	r~|  |	  d S )Nz**z
*.{py,pyx})ZnthreadsZexclude_failuresexcludeZcompiler_directivescompile_time_envforcequietdepfiler   c                s   g | ]} |gfqS r   r   ).0ext)r9   r   r   
<listcomp>u   s    z"cython_compile.<locals>.<listcomp>)r   r6   r7   abspathr   build_inplaceisdirr   dirnamer   r   parallel
keep_goingexcludesr&   r>   r?   r@   rA   r0   buildlenmultiprocessingZPoolOSErrorr
   r   run_distutilsr   r   )path_patternr0   poolZ	all_pathsr7   pathsext_modulesr   )r9   r   cython_compileN   sP    




rU   c          	   C   s   | \}}ddg}t  }d }z:|rFt | tj|d}|d|g td||d W d |rt | |rt j|rt	
| X d S )N	build_extz-i)dirz--build-tempzsetup.py)script_namescript_argsrT   )r6   getcwdchdirtempfilemkdtempextendr   r7   rG   shutilrmtree)r   r9   rT   rY   cwdtemp_dirr   r   r   rP      s"    

rP   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dMdNd%dOdP || \}} | s|	dQ |j
rdR|_td krd|_|jr|jdSkst|j|jd< || fS )TNr   )OptionParserz'%prog [options] [sources and packages]+)usagez-Xz--directivezNAME=VALUE,...r&   strcallbackzset a compiler directive)metavarr   defaulttypeactionrf   helpz-Ez--compile-time-envr>   z'set a compile time environment variablez-sz--optionz
NAME=VALUEr0   zset a cythonize optionz-2language_levelstore_constr   z#use Python 2 syntax mode by default)r   rj   constrh   rk   z-3   z#use Python 3 syntax mode by default)r   rj   rn   rk   z--3str3strz-az
--annotateannotate
store_truez-generate annotated HTML page for source files)r   rj   rk   z-xz	--excludeZPATTERNrK   appendz2exclude certain file patterns from the compilation)rg   r   rj   rh   rk   z-bz--buildrL   z'build extension modules using distutilsz-iz	--inplacerF   z=build extension modules in place using distutils (implies -b)z-jz
--parallelrI   Nz+run builds in N parallel jobs (default: %d)r   )r   rg   ri   rh   rk   z-fz--forcer?   zforce recompilationz-qz--quietr@   z"be less verbose during compilationz	--lenientlenientzBincrease Python compatibility by ignoring some compile time errorsz-kz--keep-goingrJ   z8compile as much as possible, ignore compilation failuresz-Mz	--depfilez produce depfiles for the sources)rj   rk   zno source files providedT)r   ro   rp   )optparserc   
add_optionr'   r5   r4   intparallel_compiles
parse_argserrorrF   rL   rN   rI   rl   AssertionErrorr0   )r   rc   r%   r0   r   r   r   rz      sj    






rz   c             C   sF   t | \}}|jrdt_dt_|jr*dt_x|D ]}t|| q0W d S )NFT)rz   ru   r	   Zerror_on_unknown_namesZerror_on_uninitializedrq   rU   )r   r0   rS   r7   r   r   r   main   s    
r}   __main__)N)
__future__r   r6   r_   r\   distutils.corer   ZDependenciesr   r   ZUtilsr   ZCompilerr	   rN   rx   	cpu_country   r   objectr
   r'   r4   r5   r<   rU   rP   rz   r}   r   r   r   r   r   <module>   s0   
	4=
