3
NZ-)                 @   sN  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Zd dlT d dl	m
Z
mZ d dlmZ ejdejZejdejZd ZdZd	ad	ad
d Zd<ddZd=ddZd>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 d@d$d%Z!d&d' Z"d(d) Z#d*d+ Z$d,d- Z%d.d/ Z&d0d1 Z'd2d3 Z(d4d5 Z)d6d7 Z*d8d9 Z+d:d; Z,dS )A    N)PopenPIPE)*)utilsservices)to_bytes_utf8z(\d+\.\d+\.\d+)z	(\d+.\d+)    c              C   s<   t jdtjjt jdd dd\} a| dkr8tjd d S )Nz%s -pZldconfigF)
log_outputr   zldconfig failed.)	r   runospathjoinwhich	ld_outputlogdebug)status r   $/usr/share/hplip/installer/dcheck.pyupdate_ld_output/   s    &r           c             C   s  t jd| |f  tj| \}}|dkr6t jd dS |ry|j d }W n tk
rb   d}Y nX t j| tj|}y|jd}W n t	k
r   d}Y nX yt
|}W n tk
r   dS X t jd||f  ||k rt jd ||kS nt jd	 d
S d S )NzChecking: %s (min ver=%f)r   z
Not found!Fr	   r   zVer=%f Min ver=%fz"Found, but newer version required.zFound.T)r   r   r   r   
splitlines
IndexErrorver_patsearchgroupAttributeErrorfloat
ValueError)cmdmin_verr   outputline	match_objverZv_fr   r   r   
check_tool7   s4    







r&   c             C   s<   t jd|   tj| dkr*t jd dS t jd dS d S )NzChecking for library '%s'...r   zFound.Tz
Not found.F)r   r   r   find)libr!   r   r   r   	check_lib[   s    

r)   /usr/includec             C   sN   t jd| |f  x,tj|ddd| dD ]}t jd|  dS W t jd dS )Nz"Searching for file '%s' in '%s'...TF)recurse	abs_pathsreturn_folderspatternzFile found at '%s'zFile not found.)r   r   r   	walkFiles)fdirwr   r   r   
check_filei   s    
r3   c             C   sj   t jd| |f  g }x0tj|ddd| dD ]}t j| |j| q,W |r\t jd|  n
t jd |S )Nz%Searching for file(s) '%s' in '%s'...TF)r+   r,   r-   r.   zFound files: %szNo files not found.)r   r   r   r/   append)r0   r1   foundr2   r   r   r   locate_filess   s    

r6   c             C   sv   t jd| ||f  g }x:tj|ddd| dD ]"}t||r.t j| |j| q.W |rht jd|  n
t jd |S )zf
        Find a list of files located in a directory
        that contain a specified sub-string.
    z7Searching for file(s) '%s' in '%s' that contain '%s'...TF)r+   r,   r-   r.   zFound files: %szNo files not found.)r   r   r   r/   check_file_containsr4   )r0   r1   sr5   r2   r   r   r   locate_file_contains   s    


r9   c             C   s   t jd| |f  zbtjj| rht|}x>t| dD ]0}t  ||kr4t jd|jdd| f  dS q4W t jd dS t	  X d S )	Nz'Checking file '%s' for contents '%s'...rbz'%s' found in file '%s'.   
    TzContents not found.F)
r   r   r   r   existsr   openupdate_spinnerreplacecleanup_spinner)r0   r8   ar   r   r   r7      s    
r7   c             C   s   | d k	rt jd|   z`xP| D ]H}t  tj|\}}|dkrx"|D ]}t jd|| |f  qDW dS qW t jd dS t  X d S )Nz*Searching for '%s' in running processes...TzFound: %s (%s)z	Not foundF)r   r   r?   r   Is_Process_RunningrA   )Zprocess_listpr   Zprocessr   r   r   check_ps   s    


rE   c             C   s   i }| d k	rt jd|   zfx`| D ]X}t  tj|\}}|dkrpt jdt|  x$|D ]}|| ||< qZW q"t jd q"W W d t  X |S )Nz*Searching for '%s' in running processes...TzFound: %d processesz	Not found)r   r   r?   r   rC   lenrA   )Zprocess_name_listZprocesses_listrD   r   Z	processespidr   r   r   
get_ps_pid   s    

rH   c             C   s8   t s*tjd}tjtjj|ddd\}a t j| dkS )NlsmodF)r
   r   )
mod_outputr   r   r   r   r   r   r'   )modulerI   r   r   r   r   check_lsmod   s    
rL   0.0c          #   C   s  t jd| |f  d}|dkrvtj|}y|jd}W n tk
rN   d}Y nX yt|}W n tk
rt   d}Y nX d}| dkrtj| }y|jd}W n tk
r   d}Y nX yt|}W n tk
r   d}Y nX ||k rt jd dS t jd d	S d S )
Nz&Checking: installed ver=%s  min ver=%sr   -r   r	   z"Found, but newer version required.FzFound.T)r   r   r   r   r   r   r   r   )Zinst_ver_strZmin_ver_strr!   r$   r%   Zinst_verr   r   r   check_version   s8    







rO   rN   c             C   s   t jd|   tj| \}}|dkr2t jd |S y|j d }W n tk
rZ   d}Y nX t j| tj|}y|jd}W nF t	k
r   t
j|}y|jd}W n t	k
r   |S X |S Y nX |S d S )NzChecking: %sr   z
Not found!r	   r   )r   r   r   r   r   r   ver1_patr   r   r   r   )r    Zdef_verr   r"   r#   r$   r%   r   r   r   get_version   s*    





rQ   c              C   s   yddd l } d}y
| j}W nH tk
r`   ydjdd | jD }W n tk
rZ   d}Y nX Y nX W n tk
r|   d}Y nX |S )Nr   rN   .c             S   s   g | ]}t |qS r   )str).0xr   r   r   
<listcomp>  s    z'get_python_dbus_ver.<locals>.<listcomp>)dbus__version__r   r   versionImportError)rW   Zdbus_versionr   r   r   get_python_dbus_ver  s    

r[   c              C   sJ   t jd d} ydd l}W n tk
r2   d} Y nX ddlm} |j} | S )NzChecking PyQt 4.x version...rN   r   )QtCore)r   r   PyQt4rZ   r\   PYQT_VERSION_STR)r%   r]   r\   r   r   r   get_pyQt4_version%  s    

r_   c              C   sJ   t jd d} ydd l}W n tk
r2   d} Y nX ddlm} |j} | S )NzChecking PyQt 5.x version...rN   r   )r\   )r   r   PyQt5rZ   r\   r^   )r%   r`   r\   r   r   r   get_pyQt5_version3  s    

ra   c              C   s>   y t jd dd l} t| j}W n tk
r4   dS X |S d S )NzTrying to import 'reportlab'...r   rN   )r   r   	reportlabrS   ZVersionrZ   )rb   r%   r   r   r   get_reportlab_version@  s    
rc   c              C   sv   t jd ydd l} W n tk
r*   dS X y
| j}W n tk
rP   | j}Y nX x|jddk rl|d7 }qTW |S d S )NzChecking PyQt 3.x version...r   rN   rR      z.0)r   r   qtrZ   r^   r   ZPYQT_VERSIONcount)re   ZpyqtVersionr   r   r   get_pyQt_versionJ  s    

rg   c              C   sz   d} yt dddddgtd}W n   d }Y nX |j d jd	}|rvtjd
}|j d }|j|rv|j|jd} | S )NrN   Zxsanez	--version2>z	/dev/null)stdoutr   zutf-8zxsane-(\d{1,}\.\d{1,}).*r   )	r   r   Zcommunicatedecoderecompiler   r   r   )Zinstalled_verZp1r"   Zxsane_ver_patZxsane_ver_infor   r   r   get_xsane_version]  s    


rn   c              C   s0   yddl m}  W n tk
r$   dS X | jS d S )Nr   )ImagerN   )ZPILro   rZ   VERSION)ro   r   r   r   get_pil_versionn  s
    rq   c              C   sb   ydd l } dd l}dd l}W n tk
r0   dS X |j|jjd|jd d}|j|j	_
|j	 S d S )Nr   rN   cT)sysctypesZctypes.utilrZ   ZCDLLutilZfind_libraryZDEFAULT_MODEZc_char_pZgnu_get_libc_versionZrestype)rs   rt   LIBCr   r   r   get_libpthread_versionv  s    
rw   c              C   s@   ydd l } W n tk
r    dS X djdd | jjjD S d S )Nr   rN   rR   c             S   s   g | ]}t |qS r   )rS   )rT   rU   r   r   r   rV     s    z*get_python_xml_version.<locals>.<listcomp>)Zxml.parsers.expatrZ   r   ZparsersZexpatversion_info)Zxmlr   r   r   get_python_xml_version  s
    ry   c               C   s   t jS )N)ZproprY   r   r   r   r   get_HPLIP_version  s    rz   c               C   s"   t jddddkrtdS dS d S )NZ	configurezlibusb01-buildnoyeszlibusb-config --versionz1.0)Zsys_confgetrQ   r   r   r   r   get_libusb_version  s    r~   )r   )r   )r*   )rM   )rN   )-r   os.pathrl   rs   
subprocessr   r   codecsZbase.gbaser   r   Zbase.sixextr   rm   
IGNORECASErP   r   ZPIDZCMDLINEr   rJ   r   r&   r)   r3   r6   r9   r7   rE   rH   rL   rO   rQ   r[   r_   ra   rc   rg   rn   rq   rw   ry   rz   r~   r   r   r   r   <module>   sJ   
$


	
#

