
    -.f                     >    d dl Z d dlZd dlZd dlmZ  G d de      Zy)    N)Popenc                   D    e Zd ZddZd Zd Zd Zd Zd Zd Z	d	 Z
d
 Zy)KernelDetectionNc                    |r"|| _         t        j                  |      | _        y t        j                          t        j
                          t        j                  d       | _         t        j                  |      | _        y N)	apt_cacheapt_pkgDepCacheapt_depcacheinit_configinit_systemCache)selfcaches     ?/usr/lib/python3/dist-packages/UbuntuDrivers/kerneldetection.py__init__zKernelDetection.__init__    sZ    "DN ' 0 0 7D!!$]]40DN ' 0 0 7D    c                    t        j                  d      }|j                  |      }|j                  |      }|rJ|j                  d      d|j                  d      }|j                  d      d|j                  d      }t	        j
                  d|d|       d|d|}t        |j                  d	            }|j                          |j                   S )
Nz(.+)-([0-9]+)-(.+)   -   z
Comparing z with zdpkg --compare-versions z gt  )
recompilematchgrouploggingdebugr   splitcommunicate
returncode)r   term1term2patternmatch1match2commandprocesss           r   _is_greater_thanz KernelDetection._is_greater_than*   s     **12u%u%%||A%||A0E%||A%||A0E 	u=>%!c*+%%%%r   c                 |    t        j                  d      }|j                  |      }d}|r|j                  d      }|S )Nz2linux-image-([0-9]+\.[0-9]+\.[0-9]+)-([0-9]+)-(.+)    )r   r   r   r   )r   
candidatesimager$   r   flavours         r   _get_linux_flavourz"KernelDetection._get_linux_flavour=   s9    **RSe$kk!nGr   c                     |j                   }|j                  d      r-d|vr)|j                  s| j                  j	                  |      r|S y )Nlinux-imageextra)name
startswithcurrent_verr   marked_install)r   pkgpackage_names      r   _filter_cachezKernelDetection._filter_cacheF   sD    xx##M2<'S__-1->->-M-Mc-Rr   c                    d}d}d}d|dk(  rdndz  }t        j                  d      }t        | j                  | j                  j
                        D ]f  }|s|j                  |      }|s|j                  d      }	|j                  d      d|j                  d	      }
| j                  |
|      sc|
}|	}h |r|dk(  r|j                  dd      }n|}| j                  |   j                  D cg c]=  }|j                  j                  j                  |      r|j                  j                  ? }}|rd}|D ]s  }	 | j                  |   }|j                  |      rP|rN|j                  s| j                  j!                  |      r'|j                  |d      |j                  |d      kD  r|}u |d
k(  r| j                  |   j                  D cg c]=  }|j                  j                  j                  d      r|j                  j                  ? }}|r>| j%                  ||      }d}|D ]  }|j                  d|z        s|} n |s|d   }|S |}|S c c}w # t"        $ r Y -w xY wc c}w )z7Get the linux headers, linux-image or linux metapackager+   zlinux-%sheadersr.   z,linux-image-(?:unsigned-)?(.+)-([0-9]+)-(.+)r   r   r   r   metazlinux-z	linux-%s-)r   r   mapr:   r   packagesr   r   r)   replacerev_depends_list
parent_pkgr4   r5   r6   r   r7   KeyErrorr0   )r   targetmetapackageimage_packageversionprefixr$   r9   r   current_packagecurrent_versiontarget_packagedepreverse_dependencies	candidatecandidate_pkgr/   
linux_metar=   s                      r   _get_linux_metapackagez&KernelDetection._get_linux_metapackageO   s   Fi,?yWM**KL 2 2DNN4K4KL 	8Ll3 &+kk!nO16Q16Q'AO ,,_-46"1(7	8  "!.!6!6w	!J!.CG>>R`Ca%5%5$aC9<9L9L9W9WX^9_ %(NN$7$7 $a  $a $ !!5 !I!(,y(A%008m)559J9J9Y9YZg9h$,,VR8;;N;NvWY;ZZ*3K! V#KO>>ZeKf-=-=,kCADATATA_A_`hAi -0NN,?,? ,k( ,k+"&"9"9:NP^"_%'
$8 &D#{g/FG-1
 %	&  **>q*AK  +5KG$a $ ! !
,ks!   3AIA0IAI/	I,+I,c                 $    | j                  d      S )5Get the linux headers for the newest_kernel installedr<   rQ   r   s    r   get_linux_headers_metapackagez-KernelDetection.get_linux_headers_metapackage   s    **955r   c                 $    | j                  d      S )rS   r.   rT   rU   s    r   get_linux_image_metapackagez+KernelDetection.get_linux_image_metapackage   s    **733r   c                 $    | j                  d      S )z9Get the linux metapackage for the newest_kernel installedr=   rT   rU   s    r   get_linux_metapackagez%KernelDetection.get_linux_metapackage   s    **622r   c                    | j                         }d}	 | j                  j                  | j                  |         }|j                  j                  d      D ]@  }|D ]9  \  }}}|j                  d      s|j                         j                  dd      } @ B 	 |S # t        $ r t        j                  d|z         Y y w xY w)Nr+   Dependsr2   zlinux-image-z#No dependencies can be found for %s)rX   r   get_candidate_verr   depends_list_strgetr5   stripr@   rC   r   error)r   linux_image_metalinux_versionrN   dep_listdep_namedep_verdep_ops           r   get_linux_versionz!KernelDetection.get_linux_version   s    ;;=	 ));;DNNK[<\]I%66::9E 19 -Hgv**=9(0(8(@(@QS(T$   	MM?CSTU	s   A B 5%B !C Cr   )__name__
__module____qualname__r   r)   r0   r:   rQ   rV   rX   rZ   rh    r   r   r   r      s1    8&&BH643r   r   )r	   r   r   
subprocessr   objectr   rl   r   r   <module>ro      s!   .   	 Zf Zr   