
    =	fl)                     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Zd dl 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
 Zd!dZd"dZd#dZd Zd Zd Zd Zd Zd Zd$dZ d%dZ!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d Z+d  Z,y)&    N)PopenPIPE)*)utilsservices)to_bytes_utf8z(\d+\.\d+\.\d+)z
(\d+\.\d+)    c                      t        j                  dt        j                  j	                  t        j
                  d      d      z  d      \  } a| dk7  rt        j                  d       y y )Nz%s -pldconfigF
log_outputr   zldconfig failed.)	r   runospathjoinwhich	ld_outputlogdebug)statuss    $/usr/share/hplip/installer/dcheck.pyupdate_ld_outputr   /   sQ     		'BGGLLZ9PR\,]"]jopFI{		$%     c                 X   t         j                  d| |fz         t        j                  |       \  }}|dk7  rt         j                  d       y|r	 |j	                         d   }t         j                  |       t        j                  |      }	 |j                  d      }	 t        |      }t         j                  d||fz         ||k  rt         j                  d       ||k\  S t         j                  d	       y
# t
        $ r d}Y w xY w# t        $ r d}Y yw xY w# t        $ r Y yw xY w)NzChecking: %s (min ver=%f)r   
Not found!Fr
   r	   zVer=%f Min ver=%f"Found, but newer version required.Found.T)r   r   r   r   
splitlines
IndexErrorver_patsearchgroupAttributeErrorfloat
ValueError)cmdmin_verr   outputline	match_objverv_fs           r   
check_toolr.   7   s   II)S'N:;YYs^NFF{		,((*1- IIdOt,Iooa(
&Cj 		-g>?=IIBCg~%IIh-   " 
  s6   C; D !D ;D	D	DD	D)(D)c                     t         j                  d| z         t        j                  |       dk\  rt         j                  d       yt         j                  d       y)NzChecking for library '%s'...r   r   Tz
Not found.F)r   r   r   find)libr(   s     r   	check_libr2   [   sE    II,s23~~ca		(
 		,r   c                     t         j                  d| d|d       t        j                  |ddd|       D ]  }t         j                  d|z          y t         j                  d       y)	NzSearching for file '' in ''...TFrecurse	abs_pathsreturn_folderspatternzFile found at '%s'zFile not found.)r   r   r   	walkFiles)fdirws      r   
check_filer?   i   s[    IIa=>__S$$u^_` 		&*+ II r   c                 .   t         j                  d| d|d       g }t        j                  |ddd|       D ](  }t         j                  |       |j	                  |       * |rt         j                  d|z         |S t         j                  d       |S )	NSearching for file(s) 'r4   r5   TFr6   Found files: %sNo files not found.)r   r   r   r;   append)r<   r=   foundr>   s       r   locate_filesrF   s   s    IIC@AE__S$$u^_` 		!Q 		#e+, L 			'(Lr   c           	      N   t         j                  d| d|d|d       g }t        j                  |ddd|       D ]5  }t	        ||      st         j                  |       |j                  |       7 |rt         j                  d|z         |S t         j                  d	       |S )
zf
        Find a list of files located in a directory
        that contain a specified sub-string.
    rA   r4   z' that contain 'r5   TFr6   rB   rC   )r   r   r   r;   check_file_containsrD   )r<   r=   srE   r>   s        r   locate_file_containsrJ      s    
 II1cSTUVE__S$$u^_` q!$IIaLLLO	 		#e+, L 			'(Lr   c                    t         j                  d| d|d       	 t        j                  j	                  |       rbt        |      }t        | d      D ]H  }t                ||v st         j                  d|j                  dd      d| d	        t                y
 t         j                  d       	 t                y# t                w xY w)NzChecking file 'z' for contents 'r5   rb'   
r   z' found in file 'z'.TzContents not found.F)
r   r   r   r   existsr   openupdate_spinnerreplacecleanup_spinner)r<   rI   as      r   rH   rH      s    II1a@A77>>!a A!T]   6IIAIIeS<QSTUV 	  			'( 	s   AC  &-C  C   Cc           	      V   | t         j                  d| z         	 | D ]Z  }t                t        j                  |      \  }}|du s*|D ]!  }t         j                  d||   d|d       #  t                y t         j                  d       	 t                y# t                w xY w)N*Searching for '%s' in running processes...TzFound: z ()	Not foundF)r   r   rQ   r   Is_Process_RunningrS   )process_listpr   processs       r   check_psr]      s    		>MN 	A"55a8NF7~  BAII'!*a@AB
 		 			+s   +B 'B :B B(c                 ^   i }| t         j                  d| z         	 | D ]n  }t                t        j                  |      \  }}|du r1t         j                  dt        |      z         |D ]
  }||   ||<    Zt         j                  d       p 	 t                |S |S # t                w xY w)NrV   TzFound: %d processesrX   )r   r   rQ   r   rY   lenrS   )process_name_listprocesses_listr[   r   	processespids         r   
get_ps_pidrd      s    N$		>ARRS	& + #(#;#;A#> yT>II3c)nDE( <-6s^s+< IIk*+ > s   A3B   B,c                     t         sMt        j                  d      }t        j                  t        j
                  j                  |d      d      \  }a t         j                  |       dk\  S )NlsmodFr   r   )
mod_outputr   r   r   r   r   r   r0   )modulerf   r   s      r   check_lsmodri      sN     G$"YYrww||E7'CPUV
??6"a''r   c                 
   t         j                  d| d|       d}|dk7  r3t        j                  |      }	 |j	                  d      }	 t        |      }d}| dk7  r3t        j                  |       }	 |j	                  d      }	 t        |      }||k  rt         j                  d       yt         j                  d	       y
# t
        $ r d}Y w xY w# t        $ r d}Y w xY w# t
        $ r d}Y lw xY w# t        $ r d}Y qw xY w)NzChecking: installed ver=z
  min ver=r   -r	   r
   r   Fr   T)r   r   r!   r"   r#   r$   r%   r&   )inst_ver_strmin_ver_strr(   r+   r,   inst_vers         r   check_versionro      s   II,TUGc..-		//!$C	CjG Hs...		//!$C	SzH
 '		67		(3  	C	  	G	  	C	  	H	sG   C C 3C# C4 CCC C #C10C14DDc                    t         j                  d| z         t        j                  |       \  }}|dk7  rt         j                  d       |S 	 |j	                         d   }t         j                  |       t        j                  |      }	 |j                  d      }|S # t
        $ r d}Y Kw xY w# t        $ r? t        j                  |      }	 |j                  d      }|cY S # t        $ r |cY cY S w xY ww xY w)NzChecking: %sr   r   r
   r	   )r   r   r   r   r   r    ver1_patr"   r#   r$   r!   )r'   def_verr   r)   r*   r+   r,   s          r   get_versionrs      s    IIn$%YYs^NFF{		,	$$&q)D 			$OOD)		//!$C J!  	D	  	t,Iooa( 
 " 		sB   B B0 B-,B-0C8C$ C8$C4/C83C44C8c            	         	 dd l } d}	 | j                  }|S # t        $ rO 	 dj                  | j                  D cg c]  }t        |       nc c}w c}      }n# t        $ r d}Y nw xY wY |S w xY w# t        $ r d}Y |S w xY w)Nr   rk   .)dbus__version__r$   r   versionstrImportError)rv   dbus_versionxs      r   get_python_dbus_verr}     s    	#++L   	##"xx(FAQ(F(FG! #"# 	#
  sZ   A2  	A/AA
AA/A(%A/'A((A/+A2 .A//A2 2B Bc                      t         j                  d       d} 	 dd l}ddlm} |j                  } | S # t
        $ r d} Y | S w xY w)NzChecking PyQt 4.x version...rk   r   QtCore)r   r   PyQt4r   PYQT_VERSION_STRrz   )r,   r   r   s      r   get_pyQt4_versionr   %  N    II,-	C& 	!%%J   J   1 A A c                      t         j                  d       d} 	 dd l}ddlm} |j                  } | S # t
        $ r d} Y | S w xY w)NzChecking PyQt 5.x version...rk   r   r   )r   r   PyQt5r   r   rz   )r,   r   r   s      r   get_pyQt5_versionr   3  r   r   c                      	 t         j                  d       dd l} t        | j                        }|S # t
        $ r Y yw xY w)NzTrying to import 'reportlab'...r   rk   )r   r   	reportlabry   Versionrz   )r   r,   s     r   get_reportlab_versionr   @  sB    		34)##$ 
  s   .2 	>>c                     t         j                  d       	 dd l} 	 | j                  }|j                  d      dk  r|dz  }|j                  d      dk  r|S # t        $ r | j
                  }Y Gw xY w# t        $ r Y yw xY w)NzChecking PyQt 3.x version...r   ru      z.0rk   )r   r   qtr   r$   PYQT_VERSIONcountrz   )r   pyqtVersions     r   get_pyQt_versionr   J  s    II,-
	*--K $q(4K $q(   	*//K	*  s"   A3 A A0/A03	A?>A?c                  >   d} 	 t        g dt              }|j                         d   j                  d      }|rYt	        j
                  d      }|j                         d   }|j                  |      r |j                  |      j                  d      } | S #  d }Y cxY w)Nrk   )xsanez	--version2>z	/dev/null)stdoutr   zutf-8zxsane-(\d{1,}\.\d{1,}).*r	   )	r   r   communicatedecoderecompiler   r"   r#   )installed_verp1r)   xsane_ver_patxsane_ver_infos        r   get_xsane_versionr   ]  s    M3=dK ~~"))'2 zz"AB**,Q//)00@FFqIMs   B Bc                  B    	 dd l } | j                  S # t        $ r Y yw xY w)Nr   rk   )PILrw   rz   )r   s    r   get_pil_versionr   n  s*     
 		  s    	c                      	 dd l } dd l}dd l}|j                  |j                  j                  d      |j                  d d      }|j                  |j                  _	        |j                         S # t        $ r Y yw xY w)Nr   cTrk   )sysctypesctypes.utilCDLLutilfind_libraryDEFAULT_MODEc_char_pgnu_get_libc_versionrestyperz   )r   r   LIBCs      r   get_libpthread_versionr   x  sn    +''
 {{6;;33C89L9LTSWX,2OO!!)((**  s   A0 0	A<;A<c                      	 dd l } dj                  | j                  j                  j                  D cg c]  }t        |       c}      S c c}w # t        $ r Y yw xY w)Nr   ru   rk   )xml.parsers.expatr   parsersexpatversion_infory   rz   )xmlr|   s     r   get_python_xml_versionr     sR    K  #++*;*;*H*HIQ#a&IJ	JI  s   A A	AAc                  "    t         j                  S )N)proprx    r   r   get_HPLIP_versionr     s    <<r   c                  N    t         j                  ddd      dk(  rt        d      S y)N	configurezlibusb01-buildnoyeszlibusb-config --versionz1.0)sys_confgetrs   r   r   r   get_libusb_versionr     s'    ||K!148EA455r   )g        )r   )z/usr/include)z0.0)rk   )-r   os.pathr   r   
subprocessr   r   codecsbase.gbaser   r   base.sixextr   r   
IGNORECASErq   r!   PIDCMDLINEr   rg   r   r.   r2   r?   rF   rJ   rH   r]   rd   ri   ro   rs   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>r      s   . 
  	 
 "     %2::,bmm<
"**&
6
 	
&!H(&"*( F8&" 	+Kr   