B
    XM\Q1                 @   s  d dl mZmZmZ d dlmZ d dlZd dlmZ d dl	m
Z
mZmZmZ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mZ d dlmZmZ d dlmZmZmZmZmZm Z m!Z! d d	l"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( d d
l"m)Z)m*Z* d dl"m+Z+ e+dd Z,dd Z-dd Z.G dd dZ/e/ Z0d,ddZ1d-ddZ2dd Z3d.ddZ4d d! Z5d"d# Z6ej7dddd$d%fd&d'Z8ej7d$fd(d)Z9d*d+ Z:dS )/    )absolute_importdivisionprint_function)defaultdictN)
itemgetter)abspathjoindirnameexistsbasename)get_linkagesget_package_obj_filesget_untracked_obj_files)
get_rpathshuman_filetype)groupbygetter
comma_joinrm_rfpackage_has_file
get_loggerensure_list)	iteritemsspecs_from_args	is_linkedlinked_datalinked	get_index)display_actionsinstall_actions)memoizedc             C   s   t | |}t|d S )Nfiles)r   set)prefixdistmeta r&   6lib/python3.7/site-packages/conda_build/inspect_pkg.py
dist_files   s    
r(   c             c   s4   x.t |D ]"}| tjdt||kr
|V  q
W dS )z
    given the path of a conda installed file iterate over
    the conda packages the file came from.  Usually the iteration yields
    only one package.
    /N)r   replaceossepr(   )in_prefix_pathr#   r$   r&   r&   r'   which_package#   s    r.   c                s   d}t | }xt|tdD ]}||d 7 }x~t|| tddD ]f x<t D ]0}|kr^qP | d krlqP|d| | f 7 }qPW t fdd D dkrB|d7 }qBW |d7 }qW |S )	N )key
filenamez	  %s: %s
c                s$   g | ]} | d k	r|kr|qS )Nr&   ).0i)f_infor0   r&   r'   
<listcomp>:   s    z%print_object_info.<locals>.<listcomp>   )r   sortedstrr   len)infor0   output_stringZgbheaderdatar&   )r5   r0   r'   print_object_info.   s    
r?   c               @   s   e Zd Zdd ZdS )_untracked_packagec             C   s   dS )Nz<untracked>r&   )selfr&   r&   r'   __str__A   s    z_untracked_package.__str__N)__name__
__module____qualname__rB   r&   r&   r&   r'   r@   @   s   r@   r&   TFc       	      C   sR   t d}z8t| }t||||d}t|||d|d}t|| |S t| X d S )Nconda)channel_urlsprependplatformr#   F)Zpinnedminimal_hint)tempfileZmkdtempr   r   r   r   r   )	packagesrI   rG   rH   rJ   r#   ZspecsindexZactionsr&   r&   r'   check_installH   s    




rN   c             C   s  i }x,|   D ] \}}t|dr&|j}|||< qW |} tt|  ddh }d|  kr^|n
|ddg }d}x|D ]}|d| 7 }|rxht| | D ]\}}	}
|d||	|
f 7 }qW n:x8ttttdd| | D ]\}}	|d	||	f 7 }qW |d
7 }qtW |S )N	dist_namesystemz	not foundr/   z%s:
z    %s (%s) from %s
r   r7   z    %s (%s)
r1   )itemshasattrrO   r8   r"   keysmapr   )depmap
show_filesZdist_depmapkvZall_depsr<   deplibpathbinaryr&   r&   r'   print_linkagesX   s$    

&r]   c             C   s   t jdrt|S t jdr|t| kr:tt|| S d|krtt|| }|sXdS xJ|D ]>}|d|}|dt|t| }t	tt||r^|}P q^W dS |dt|t| }|drt|S dS d S )Nlinuxdarwinz@rpathzNO LC_RPATH FOUNDz@loader_pathz	not foundr)   )
sysrI   
startswithr   r   r   r   r*   r	   r
   )r\   r[   r#   ZrpathsrpathZpath1r&   r&   r'   replace_pathp   s(    

rc   defaultsc             C   s  d}t t}td}xhdD ]^}|d| | g}t|d|d}x6t|D ](\}}| dkrt|dddkrtqP|d	 }	|	d
krqP|	drqP|d }
|	|
}d|
kr|sndst
|
|rd|d|df g}ng }|d }|d|	| y.t|	d | g| |d|d}|t|M }W qP tk
r>    Y qP tk
rx } zd}|d|	|||| W d d }~X Y qPX qPW qW |S )NTz
py(\d)(\d))zosx-64zlinux-32zlinux-64zwin-32zwin-64z%######## Testing platform %s ########F)rG   rH   rI   rd   Zschannelname>   conda-buildrF   @buildpyzpython=%s.%sr7      versionzTesting %s=%s=zFAIL: %s %s on %s with %s (%s))r   rC   recompiler;   r   r   getendswithsearchAssertionErrorgrouprN   boolKeyboardInterruptBaseExceptionerror)ZchannelZsuccesslogZhas_pyrI   ZchannelsrM   _recre   rh   matchZadditional_packagesrk   Zinstall_stepser&   r&   r'   test_installable   sF    



$r}   c             C   s   t | }dd t|D }|S )Nc             S   s   i | ]\}}||d  qS )re   r&   )r3   r$   rz   r&   r&   r'   
<dictcomp>   s    z_installed.<locals>.<dictcomp>)r   r   )r#   	installedr&   r&   r'   
_installed   s    r   c             C   s    t | d dtt |   d S )Nr1   -z

)r9   r:   )textr&   r&   r'   _underlined_text   s    r   packager/   c             C   sd  i }t |}| s |s |s td|r0t| } |r>| t xt| D ] }	|	tkr^t}
n$|	|krztd|	|f  n||	 }
tj	
dstd |
tkrt|}n
t|
|}t|||}tt}|||	< g |d< g |d< xh|D ]^}xV|| D ]H\}}|dkrt|||n|}|
|rtd| d	 d
|}tt||}t|dkrdd |D }ttd|t| |st|r|d |||d	 dd |f n$|d |||d	 dd |f xh|D ]*}|| |||d	 dd |f qW q|dkr0|d |||f q|d |||f qW qW qJW d
}|dkrx| D ]&}	|t|	7 }|t||	 |d7 }qdW n|dkr>tdd }xD|D ]<}	x4||	 D ](}||	 | r||	 | || |	< qW qW tt| ddh }xD|ddg D ]&}|t|7 }|t|| |d7 }qW ntd| t|dr`|d}|S )Nz=At least one package or --untracked or --all must be providedz!Package %s is not installed in %s)r^   r_   zCError: conda inspect linkages is only implemented in Linux and OS Xz	not foundrP   >   r/   	not found^r)   r/   r7   c             S   s   g | ]}t |qS r&   )r9   )r3   rY   r&   r&   r'   r6      s    z$inspect_linkages.<locals>.<listcomp>z,Warning: %s comes from multiple packages: %s	untrackedr   )rV   Z
dependencyc               S   s   t tS )N)r   listr&   r&   r&   r'   <lambda>
  s    z"inspect_linkages.<locals>.<lambda>zUnrecognized groupby: %sdecodezutf-8) r   
ValueErrorr8   rS   appenduntracked_packager   r`   exitrI   ra   r   r   r   r   r   rc   rm   subr.   r:   r   rC   warnr   r
   splitr   r]   r"   rR   r   )rL   r#   r   Zall_packagesrV   r   ZsysrootZpkgmapr   pkgr$   	obj_filesZlinkagesrU   r\   rZ   r[   r-   ZdepsZdeps_strdr<   Zinverted_maprY   rW   r&   r&   r'   inspect_linkages   s    







 



 
r   c             C   s  t |}d}xt| D ]}|tkr(t}n"||krBtd||f n|| }|t|7 }tjdsltd |tkr~t	|}n
t
||}g }xJ|D ]B}	i }
t||	}t||
d< dt||
d< |	|
d< ||
 qW |t||7 }qW t|d	r|d
}|S )Nr/   z!Package %s is not installed in %sr_   z8Error: conda inspect objects is only implemented in OS XZfiletype:rb   r2   r   zutf-8)r   r   r   r   r   r`   rI   ra   r   r   r   r   r   r   r   r?   rR   r   )rL   r#   r   r   r<   r   r$   r   r;   fr5   r[   r&   r&   r'   inspect_objects  s4    






r   c             C   sd   i }xZt | D ]N}tj|d d }i ||< t|d}|rTt| || d< qd||< qW |S )Nizinfo/hash_input.jsonZrecipez<no hash_input.json in file>)r   r+   r[   r   r   jsonloadsr   )rL   Zhash_inputsr   ZpkgnameZ
hash_inputr&   r&   r'   get_hash_inputB  s    
r   )Nr&   TF)F)rd   );Z
__future__r   r   r   collectionsr   r   operatorr   os.pathr   r   r	   r
   r   r+   rm   r`   rK   Zconda_build.os_utils.lddr   r   r   Zconda_build.os_utils.machor   r   Zconda_build.utilsr   r   r   r   r   r   r   Zconda_build.conda_interfacer   r   r   r   r   r   r   r   r    r(   r.   r?   r@   r   rN   r]   rc   r}   r   r   r#   r   r   r   r&   r&   r&   r'   <module>   s<   $  


2W%