B
    ›³ëb    ã               @   s¶   d Z ddlZddlZddlZddlZddlZddlZddl	Zddl
ZddlZddlZdZdddgZej dd¡Zd	d
„ Ze d¡Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )zÁTool-specific initialization for swig.

There normally shouldn't be any need to import this module directly.
It will usually be imported through the generic SCons.Tool.Tool()
selection method.
é    NFÚswigzswig3.0zswig2.0z$SWIGCOMz$SWIGCOMSTRc             C   s&   dt j | jd|d¡krdS dS d S )Nz-c++z
$SWIGFLAGS)Úsourcez$SWIGCXXFILESUFFIXz$SWIGCFILESUFFIX)ÚSConsÚUtilÚCLVarÚsubst)Úenvr   © r	   ú.lib/python3.7/site-packages/SCons/Tool/swig.pyÚswigSuffixEmitter1   s    r   z!%module(\s*\(.*\))?\s+("?)(\S+)\2c          
   C   sž   d}g }y*t | ƒ}| ¡ }W dQ R X t |¡}W n6 tk
rh   g }| tj tj 	| ¡¡d ¡ Y nX x*|D ]"}| |d ¡ |pd|d k}qpW ||fS )zìFind all modules referenced by %module lines in `src`, a SWIG .i file.
       Returns a list of all modules, and a flag set if SWIG directors have
       been requested (SWIG will generate an additional header file in this
       case.)r   Né   Ú	directors)
ÚopenÚreadÚ	_reModuleÚfindallÚIOErrorÚappendÚosÚpathÚsplitextÚbasename)Úsrcr   ÚmnamesÚfÚdataZmatchesÚmr	   r	   r
   Ú_find_modules<   s    
$
r   c          	   C   sp   |  |d ¡}x\| d d … D ]L}|j}|j}|t|ƒ d … |kr|  | |d t|ƒ … |d  ¡¡ qW d S )NÚSWIGCXXFILESUFFIXÚSWIGDIRECTORSUFFIX)r   ÚnameÚdirÚlenr   ÚFile)Útargetr   ÚsuffixÚxÚnÚdr	   r	   r
   Ú_add_director_header_targetsQ   s    r)   c                sŠ  ˆ j dˆ|d}tj |¡}xb|D ]X}t| ¡ ƒ}d }d|krÀd|krÀ|d kr^t|ƒ\}}|rltˆˆ ƒ dd„ |D ƒ}ˆ j dˆ|d‰ˆr¤‡ ‡fdd„|D ƒ}n‡fd	d„|D ƒ}ˆ |¡ d
|kr$|d krÜt|ƒ\}}|rêtˆˆ ƒ dd„ |D ƒ}	tj 	|	¡}	ˆ j dˆ|d‰ˆr,‡fdd„|	D ƒ}	t
tˆ jj|	ƒƒ}	dd„ }
tjj}t|ƒ}|
||< x|	D ]}||_qdW ˆ |	¡ q$W ˆ|fS )Nz
$SWIGFLAGS)r$   r   z-pythonz-noproxyc             S   s   g | ]}|d  ‘qS )z.pyr	   )Ú.0r   r	   r	   r
   ú
<listcomp>g   s    z _swigEmitter.<locals>.<listcomp>z$SWIGOUTDIRc                s"   g | ]}ˆ j  tj ˆ|¡¡‘qS r	   )Úfsr#   r   r   Újoin)r*   Új)r   Úoutdirr	   r
   r+   l   s    c                s   g | ]}ˆ d  j  |¡‘qS )r   )r!   r#   )r*   r   )r$   r	   r
   r+   n   s    z-javac             S   s   g | ]}|d  |d g‘qS )z.javazJNI.javar	   )r*   r   r	   r	   r
   r+   u   s    c                s   g | ]}t j ˆ |¡‘qS r	   )r   r   r-   )r*   r.   )r/   r	   r
   r+   y   s    c             S   s   | j S )N)r!   )ÚtÚpÚsr&   r	   r	   r
   Út_from_s{   s    z_swigEmitter.<locals>.t_from_s)r   r   r   r   ÚstrZrfiler   r)   ÚextendZflattenÚlistÚmapr,   r#   ZNodeZ_target_from_source_mapr"   Z_func_target_from_source)r$   r   r   Z	swigflagsÚflagsr   r   r   Zpython_filesZ
java_filesr3   ZtsmZtkeyZjfr	   )r   r/   r$   r
   Ú_swigEmitter\   sF    



r9   c          	   C   s´   d}|   |¡}|s|S tjj| tj |¡dg ddtjd}| ¡ dkrL|S |j	 tj 
|j	 ¡ ¡}W dQ R X t d|tj¡}|r | d¡}tr°td| ƒ ntr°td	| ƒ |S )
zCRun the SWIG command line tool to get and return the version numberNz-versionÚdevnull)ÚstdinÚstderrÚstdoutr   zSWIG Version\s+(\S+).*é   zVersion is: %szUnable to detect version: [%s])r   r   ÚActionZ_subprocr   r   Ú
subprocessÚPIPEÚwaitr=   Zto_strr   ÚreÚsearchÚ	MULTILINEÚgroupÚverboseÚprint)r   r   ÚversionÚpipeÚoutÚmatchr	   r	   r
   Ú_get_swig_version…   s(    


rM   c       	      C   sŠ  t j | ¡\}}t|jd< t|jd< | dt¡ | dt¡ | dt¡ | dt¡ t j 	| ¡}t|jd< | dt¡ | dt¡ ddl
m} ddlm} ddlm} tjdkrút jj| d|| | d}|rètj |¡}|  d	|¡ nt j t jjd
¡ d| kr|  t¡ptd | d< t| | d ƒ| d< t j d¡| d< d| d< d| d< d| d< d| d< g | d< d| d< d| d< d| d< d| d< dS ) zCAdd Builders and construction variables for swig to an Environment.z.ir   )ÚMINGW_DEFAULT_PATHS)ÚCYGWIN_DEFAULT_PATHS)ÚCHOCO_DEFAULT_PATHZwin32r   )Zdefault_pathsÚPATHz5swig tool requested, but binary not found in ENV PATHÚSWIGZSWIGVERSIONÚ Z	SWIGFLAGSz_wrap.hr   z_wrap$CFILESUFFIXZSWIGCFILESUFFIXz_wrap$CXXFILESUFFIXr   z ${"-outdir \"%s\"" % SWIGOUTDIR}Z_SWIGOUTDIRZSWIGPATHz-IZSWIGINCPREFIXZSWIGINCSUFFIXzi${_concat(SWIGINCPREFIX, SWIGPATH, SWIGINCSUFFIX,__env__, RDirs, TARGET, SOURCE, affect_signature=False)}Z_SWIGINCFLAGSzD$SWIG -o $TARGET ${_SWIGOUTDIR} ${_SWIGINCFLAGS} $SWIGFLAGS $SOURCESZSWIGCOMN)r   ZToolZcreateCFileBuildersr   r%   Z
add_actionÚ
SwigActionZadd_emitterr9   ZCreateJavaFileBuilderZSCons.Platform.mingwrN   ZSCons.Platform.cygwinrO   ZSCons.Platform.win32rP   ÚsysÚplatformZfind_program_pathr   r   ÚdirnameZAppendENVPathZWarningsÚwarnZSConsWarningÚDetectÚswigsrM   r   r   )	r   Zc_fileZcxx_fileZ	java_filerN   rO   rP   r   Zswig_bin_dirr	   r	   r
   Úgenerate¡   sF    




r[   c             C   s   |   d¡p|  dg¡}|S )NrR   r   )ÚgetrY   )r   r   r	   r	   r
   ÚexistsÓ   s    r]   )Ú__doc__Úos.pathr   rC   r@   rU   ZSCons.Actionr   ZSCons.DefaultsZ
SCons.NodeZ
SCons.ToolZ
SCons.UtilZSCons.WarningsrG   rZ   r?   rT   r   Úcompiler   r   r)   r9   rM   r[   r]   r	   r	   r	   r
   Ú<module>   s*   
	
)2