
    -.f                     T    d dl Z d dlZd dlmZmZmZ  G d de      Z G d de      Zy)    N)PopenPIPECalledProcessErrorc                   *    e Zd Zd Zd Zd Zd Zd Zy)MultiArchUtilsc                    ddd| _         | j                         | _        t        | j                   j	                               t        t        | j                   j	                               j                  | j                                  | _        t        j                  j                  d      sdt        j                  d<   y y )Ni386x86_64)r	   amd64PATH/sbin:/usr/sbin:/bin:/usr/bin)_supported_architectures_get_architecture
_main_archlistvaluesintindex_other_archosenvirongetselfs    =/usr/lib/python3/dist-packages/NvidiaDetector/alternatives.py__init__zMultiArchUtils.__init__   s    17((K%002 = = D D FG$t'D'D'K'K'M"N"T"TUYUdUd"eefh zz~~f%!@BJJv &    c                     t        dd      }t        ddgt        |d      }|j                         d   }|j	                          |j                         }| j                  j                  |      S )N	/dev/nullwdpkgz--print-architectureTstdoutstderruniversal_newlinesr   )openr   r   communicateclosestripr   r   )r   dev_nullp1parchitectures        r   r   z MultiArchUtils._get_architecture(   sd    S)F23D"t=NNQwwy,,00>>r   c                     d|z  }|S )Nz%s-linux-gnu_gl_conf )r   r-   alternatives      r   _get_alternative_name_from_archz.MultiArchUtils._get_alternative_name_from_arch1   s    ,|;r   c                 8    | j                  | j                        S N)r1   r   r   s    r   get_main_alternative_namez(MultiArchUtils.get_main_alternative_name5   s    33DOODDr   c                 8    | j                  | j                        S r3   )r1   r   r   s    r   get_other_alternative_namez)MultiArchUtils.get_other_alternative_name8   s    33D4D4DEEr   N)__name__
__module____qualname__r   r   r1   r4   r6   r/   r   r   r   r      s    	A?EFr   r   c                   J    e Zd Zd Zd Zd ZddZd Zd Zd Z	d	 Z
d
 Zd Zy)Alternativesc                     d| _         d| _        d| _        || _        t        j
                  j                  d      sdt        j
                  d<   y y )Nzmesa/ld.so.confzmesa-egl/ld.so.confzupdate-alternativesr   r   )_open_drivers_alternative_open_egl_drivers_alternative_command_master_linkr   r   r   )r   master_links     r   r   zAlternatives.__init__>   sF    ):&-B*-' zz~~f%!@BJJv &r   c                 N   t        dd      }g }t        | j                  d| j                  gt        |d      }|j                         d   }|j                          |j                  d      }|D ]3  }|j                         xr |j                  |j                                5 |S )z0Get the list of alternatives for the master linkr   r    z--listTr"   r   
)
r&   r   r?   r@   r   r'   r(   splitr)   append)r   r*   alternativesr+   r,   clines          r   list_alternativeszAlternatives.list_alternativesH   s    S)DMM8T->->?xDJNNQGGDM 	?DJJL>\00>	? r   c                 h   t        dd      }t        | j                  d| j                  gt        |d      }|j                         d   }|j                          |j                  d      }|D ]C  }|j                         j                  d      s#|j                  dd	      j                         c S  y
)zGet the alternative in user   r    z--queryTr"   r   rC   zValue: N)r&   r   r?   r@   r   r'   r(   rD   r)   
startswithreplace)r   r*   r+   r,   rG   rH   s         r   get_current_alternativez$Alternatives.get_current_alternativeV   s    S)DMM9d.?.?@xDJNNQGGDM 	:Dzz|&&x0||Hb17799	: r   Nc                     |r|j                  |d      }| j                         }|D ]  }|j                  d      d   |k(  s|c S  y)zuGet the alternative link by providing the driver name

        ignore_pattern allows ignoring a substring in the namerK   /N)rM   rI   rD   )r   nameignore_patternrF   r0   s        r   get_alternative_by_namez$Alternatives.get_alternative_by_namec   sW     <<3D--/' 	#K  %b)T1""	# r   c                 8    | j                  | j                        S )z)Get the alternative link for open drivers)rT   r=   r   s    r   get_open_drivers_alternativez)Alternatives.get_open_drivers_alternativeq   s    ++D,J,JKKr   c                 8    | j                  | j                        S )z2Get the alternative link for open EGL/GLES drivers)rT   r>   r   s    r    get_open_egl_drivers_alternativez-Alternatives.get_open_egl_drivers_alternativeu   s    ++D,N,NOOr   c                     	 t        j                  g d       t        j                  g d       y# t        t        f$ r Y yw xY w)z8Trigger gmenu so that the icons will show up in the menu)zdpkg-triggerz--by-package=fakepackage
gmenucache)r!   z--configurez-aN)
subprocess
check_callOSErrorr   r   s    r   update_gmenuzAlternatives.update_gmenuy   sA    	!! #1 2!!"?@+, 		s   .1 AAc                     	 t        j                  | j                  d| j                  |g       | j	                          | j                          y# t
        $ r Y yw xY w)z?Tries to set an alternative and returns the boolean exit statusz--setFT)r[   r\   r?   r@   ldconfigr   r^   )r   paths     r   set_alternativezAlternatives.set_alternative   s[    	!!4=='#'#4#4d#< =MMO 	 " 		s   =A 	AAc                 P    	 t        j                  dg       y# t        $ r Y yw xY w)zCall ldconfigr`   FT)r[   r\   r   r   s    r   r`   zAlternatives.ldconfig   s0    	!!:,/  " 		s    	%%c                 "   t        dd      }t        dd|gt        |d      }|j                         d   }|j	                          |j                  d      }|D ]4  }|j                         j                  d	      r y
|j                         c S  y
)z0Get the 1st kernel module name matching an aliasr   r    modprobez--resolve-aliasTr"   r   rC   zUsage:N)r&   r   r   r'   r(   rD   r)   rL   )r   aliasr*   r+   r,   rG   rH   s          r   resolve_module_aliasz!Alternatives.resolve_module_alias   s    S)J 159$"t=NNQGGDM 	 Dzz|&&x0::<	  r   r3   )r7   r8   r9   r   rI   rN   rT   rV   rX   r^   rb   r`   rg   r/   r   r   r;   r;   <   s7    ALPr   r;   )r   r[   r   r   r   objectr   r;   r/   r   r   <module>ri      s0   , 
  6 6FV FBg6 gr   