B
    0ªað  ã               @   s   d dl mZ d dl mZ d dl mZ d dl mZ d dlZd dlZd dlZd dlZddl	m
Z
mZ ddlmZ d	d
„ Zdd„ Zdd„ Zdd„ ZdS )é    )Úabsolute_import)Údivision)Úprint_function)Úunicode_literalsNé   )Úget_libtool_commandÚextract_libtool_shlib)Ú	CCompilerc             C   s,   g }x"|D ]}t |ƒ}|r
| |¡ q
W |S )N)r   Úappend)ÚoptionsÚbinaryÚ	librariesÚshlibsÚlibraryZshlib© r   ú2/usr/lib/gobject-introspection/giscanner/shlibs.pyÚ_resolve_libtool%   s    
r   c             C   s(   d}t  ¡ dkrd}t |t | ¡ ¡S )Nz2(?<![A-Za-z0-9_-])(lib*%s[^A-Za-z0-9_-][^\s\(\)]*)ÚDarwinz&([^\s]*lib*%s[^A-Za-z0-9_-][^\s\(\)]*))ÚplatformÚsystemÚreÚcompileÚescape)Zlibrary_nameÚpatternr   r   r   Ú_ldd_library_pattern<   s    r   c             C   s¸  |sg S t   ¡  d¡r€|jd }tj tj |jd ¡d¡}|tj |jd ¡ }tj |¡rv||jd< t 	d|¡ n
||jd< tj
dkr tƒ }| || ¡}ng }t| ƒ}	|	rÄ| |	¡ | d¡ t  ¡ }
|
dkrì| dd	|jd g¡ n| d
|jd g¡ tj|tjd}i }x|D ]}t|ƒ||< qW g }xZ|jD ]P}| d¡}x>| ¡ D ]2\}}| |¡}|rT||= | | d¡¡ P qTW q<W t|ƒdkr´tdd | ¡ ¡ ƒ‚|S )NZOpenBSDr   z.libs/ZLD_LIBRARY_PATHÚntz--mode=executer   Zotoolz-LZldd)ÚstdoutÚasciir   z4ERROR: can't resolve libraries to shared libraries: z, )r   Ú
startswithÚargsÚosÚpathÚjoinÚdirnameÚbasenameÚexistsÚputenvÚnamer	   Zresolve_windows_libsr   Úextendr
   r   Ú
subprocessÚPopenÚPIPEr   r   ÚdecodeÚitemsÚsearchÚgroupÚlenÚ
SystemExitÚkeys)r   r   r   Z
old_argdirZnew_libsdirZnew_libZccr   r   ÚlibtoolZplatform_systemÚprocZpatternsr   Úliner   Úmr   r   r   Ú_resolve_non_libtoolP   sP    








r7   c             C   s4   t dd„ |ƒ}t dd„ |ƒ}t| ||ƒt| ||ƒ S )Nc             S   s
   |   d¡S )Nz.la)Úendswith)Úxr   r   r   Ú<lambda>Ž   ó    z resolve_shlibs.<locals>.<lambda>c             S   s   |   d¡ S )Nz.la)r8   )r9   r   r   r   r:      r;   )Úfilterr   r7   )r   r   r   r3   Znon_libtoolr   r   r   Úresolve_shlibs   s    
r=   )Z
__future__r   r   r   r   r    r   r   r)   Zutilsr   r   Z	ccompilerr	   r   r   r7   r=   r   r   r   r   Ú<module>   s   =