
N_c           @   s  d  d l  Z  d  d l Z d  d l Z d  d l Z e Z i dH d 6dI d 6dJ d 6dK d	 6dL d 6Z e rr dM e d	 <n  i- d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d	 d 6d	 d 6d	 d 6d d	 6d d 6d
 d 6d d
 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d  d 6d! d  6d" d! 6d# d" 6d d# 6d$ d% 6d& d$ 6d' d& 6d d' 6d( d) 6d d( 6d d* 6d d+ 6d, d- 6d d, 6d d. 6d d/ 6Z i d0 d1 6d2 d3 6Z d d4  Z
 d5   Z d6   Z d7   Z d d8  Z d d9  Z d d:  Z d;   Z d<   Z d=   Z d>   Z d?   Z d@   Z dA   Z d2 dB  Z e   Z e dC  Z d dD  Z d dE  Z dF e f dG     YZ d S(N   iNt   athlont   x86_64t   sparcv9vt   sparc64vt   sparcv9t   sparc64t   ppct   ppc64t   s390t   s390xt   i686t   i586t   geodet   i486t   i386t   noarcht   amd64t   ia32et   ppc64let   ppc64p7t   ppc64pseriest   ppc64iseriest   sparcv8t   sparct	   alphaev68t   alphaev7t	   alphaev67t   alphaev6t
   alphapca56t	   alphaev56t   alphaev5t	   alphaev45t   alphaev4t   alphat   armv6lt   armv7lt	   armv5tejlt   armv5telt   armv7hlt   armv7hnlt   arm64t   aarch64t   sh4t   sh4at   sh3t   ia64t    t   platformi    t   hwcapc         C   s   t  |   }  t |   r* t d |   }  n  |  g } |  d k sN |  j d  r x9 t j   D]( \ } } | |  k r[ | j |  q[ q[ Wn  | S(   Nt   myarchR   R   R   (   R   R   (   t   getBestArcht   isMultiLibArcht   getBaseArcht
   startswitht   archest   itemst   append(   t   archt   resultst   kt   v(    (    s1   /usr/lib/python2.7/site-packages/rpmUtils/arch.pyt   legitMultiArchesInSameLibe   s    	c         C   sd   d |  | g k r t  St d |   t d |  k r8 t  S|  t |  k s\ | t |   k r` t St  S(   sb  Take two arches and return True if it is possible that they can be
       installed together with the same nevr. Ex: arch1=i386 and arch2=i686 then
       it will return False. arch1=i386 and arch2=x86_64 will return True.
       It does not determine whether or not the arches make any sense. Just whether
       they could possibly install w/o conflictR   R9   (   t   FalseR3   t   getArchListt   True(   t   arch1t   arch2(    (    s1   /usr/lib/python2.7/site-packages/rpmUtils/arch.pyt   canCoinstallv   s    
$c         C   sK   |  | k r d S|  t  k rG t t  |  |  } | d k rC | d Sd Sd S(   Ni   i    (   R6   t   archDifference(   R1   t
   targetarcht   ret(    (    s1   /usr/lib/python2.7/site-packages/rpmUtils/arch.pyRD      s    c         C   s   t  t |   S(   N(   RD   t	   canonArch(   R9   (    (    s1   /usr/lib/python2.7/site-packages/rpmUtils/arch.pyt   score   s    c         C   sM   |  d k r t }  n  |  t k r% d S|  t k r5 d St |  t k rI d Sd S(   s5   returns true if arch is a multilib arch, false if noti    i   N(   t   NoneRG   R6   t   multilibArches(   R9   (    (    s1   /usr/lib/python2.7/site-packages/rpmUtils/arch.pyR3      s    	c   
      C   sR  t  |   d k r d S| d k r+ t } n  t |  } t |  } | | k r} t |  |  } | d k r} | d k r} | Sn  |  d } x |  d D] } t | |  } t | |  } | d k r | d k r q n  | | k  r | d k r | } q n  | | k  r| d k r| } qn  | | k r q q Wt | |  }	 |	 d k rNd S| S(   s    
        return the best arch from the list for myarch if - myarch is not given,
        then return the best arch from the list for the canonArch.
    i    R   i   N(   t   lenRI   RG   R2   t   getBestArchFromListRD   (
   t   archlistR1   t
   mybestarcht   bestarcht   bestarchchoicet   thisarchR9   t   val1t   val2t   val(    (    s1   /usr/lib/python2.7/site-packages/rpmUtils/arch.pyRL      s8    	
c         C   s   |  s t  }  n  |  g } x' |  t k rA t |  }  | j |   q W| d d k re | j d d  n  t |  d k r | d |  k r | j d  n  | S(   Ni    R   i   R   R   (   RG   R6   R8   t   insertRK   (   RQ   RM   (    (    s1   /usr/lib/python2.7/site-packages/rpmUtils/arch.pyR?      s    		
"c           C   s    y t  d d  SWn g  SXd S(   sY    Try to read /proc/cpuinfo ... if we can't ignore errors (ie. proc not
        mounted). s   /proc/cpuinfot   rN(   t   open(    (    (    s1   /usr/lib/python2.7/site-packages/rpmUtils/arch.pyt   _try_read_cpuinfo   s    c          C   s   y t  d d  j   }  Wn d SXd } d } t j d  } d } t j   } x} | t |   | k r t j d |  |  \ } } | | k r | | _ | j t	 d <n  | | k r | t	 d	 <n  | | } qT Wd S(
   sw    Read /proc/self/auxv and parse it into global dict for easier access
        later on, very similar to what rpm does. s   /proc/self/auxvt   rbNi   i   t   LLi    R/   R0   (
   RW   t   readt   structt   calcsizet   ctypest   c_char_pRK   t   unpack_fromt   valuet   _aux_vector(   t   datat   AT_PLATFORMt   AT_HWCAPt   fmtlent   offsetR/   t   at_typet   at_val(    (    s1   /usr/lib/python2.7/site-packages/rpmUtils/arch.pyt   _parse_auxv   s"    	c         C   s   |  d k rP x= t    D]2 } | j d  r | j d  d k rD d SPq q W|  S|  d k r` |  Sxe t    D]Z } | j d  r | j d  d k r d	 S| j d
  rj | j d  d k r d SPqj qj W|  S(   NR   s
   model names	   Geode(TM)iR   R
   t   vendort   AuthenticAMDR    t   flagst   cmov(   RX   R5   t   find(   R9   t   line(    (    s1   /usr/lib/python2.7/site-packages/rpmUtils/arch.pyt   getCanonX86Arch
  s"    $c         C   s&   t  j d  } | j d  r" | S|  S(   Ns   %{_target_cpu}t   armv7h(   t   rpmt   expandMacroR5   (   R9   t   target(    (    s1   /usr/lib/python2.7/site-packages/rpmUtils/arch.pyt   getCanonARMArch#  s    c         C   s   |  d k r |  Sd  } x= t   D]2 } | j d  d k r  | j d  d } Pq  q  Wt d } | d  k rw | rw |  Sy6 | j d  r t | d j d	   d
 k r d SWn n X| d  k r |  S| j d  d k r d S| j d  d k r d S|  S(   NR   t   machineit   :i   R/   t   poweri   t   +i   R   s   CHRP IBMR   t   iSeriesR   (   RI   RX   Ro   t   splitRb   R5   t   intt   rstrip(   R9   Rw   Rp   R/   (    (    s1   /usr/lib/python2.7/site-packages/rpmUtils/arch.pyt   getCanonPPCArch*  s,    
.c         C   s   d  } x7 t   D], } | j d  r | j d  d } Pq q W| d  k rP |  S| j d  d k r |  j d  rx d Sd Sn  | j d	  d k r |  j d  r d Sd
 Sn  | j d  d k r d S|  S(   Nt   typeRx   i   t   sun4viR   R   R   t   sun4uR   t   sun4mR   (   RI   RX   R5   R|   Ro   (   R9   t	   SPARCtypeRp   (    (    s1   /usr/lib/python2.7/site-packages/rpmUtils/arch.pyt   getCanonSPARCArchH  s$    c         C   s   |  d k r |  Sd  } x7 t   D], } | j d  r  | j d  d } Pq  q  W| d  k r` |  S| j d  d k s | j d  d k r d S| j d	  d k r d
 S|  S(   NR   t	   vendor_idRx   i   s   Authentic AMDiRl   R   t   GenuineIntelR   (   RI   RX   R5   R|   Ro   (   R9   Rk   Rp   (    (    s1   /usr/lib/python2.7/site-packages/rpmUtils/arch.pyt   getCanonX86_64Arch`  s    *c         C   s,  |  rq t  j d t  j  rq yH t d d  } | j   } | j   | j d d  \ } } } | SWqq qq Xn  t  j   d } t   t	 |  d k r | d d k r | d d !d k r t
 |  S| j d	  r t |  S| j d
  r t |  S| j d  rt |  S| d k r(t |  S| S(   Ns   /etc/rpm/platformRV   t   -i   i   i    t   it   86t   armR   R   R   (   t   ost   accesst   R_OKRW   t   readlinet   closeR|   t   unameRj   RK   Rq   R5   Rv   R   R   R   (   t   skipRpmPlatformt   fRp   R9   Rk   t   opersys(    (    s1   /usr/lib/python2.7/site-packages/rpmUtils/arch.pyt   getCanonArchr  s,    
5




c         C   sE   |  t  k r t  |  S|  t k rA t |  d k rA t d t |   Sd  S(   NR   R9   (   RJ   R6   t   getMultiArchInfoRI   (   R9   (    (    s1   /usr/lib/python2.7/site-packages/rpmUtils/arch.pyR     s
    c         C   sd   |  r |  } n t  } | j d  r5 t | d } n  | j d  r` t r` | d k r` d } n  | S(   NR   i   R   R   R   (   RG   R5   RJ   t   _ppc64_native_is_best(   R1   R9   (    (    s1   /usr/lib/python2.7/site-packages/rpmUtils/arch.pyR2     s    	"	c         C   s  |  s t  }  n  |  t k r |  S|  j d  r2 d S|  d k rB d S|  j d  r\ t r\ d S|  j d  ro d S|  j d  r d S|  j d	  r d	 St d
 |   r |  t k r |  St |  Sn  |  t k r|  } t | } x  | d k r | } t | } q W| Sd S(   s   returns 'base' arch for myarch, if specified, or canonArch if not.
       base arch is the arch before noarch in the arches dict if myarch is not
       a key in the multilibArches.R   R   R   R   R   R(   Rr   t   armhfpR   R9   R   N(   RG   R6   R5   R   R3   RJ   (   R1   t   basearchRa   (    (    s1   /usr/lib/python2.7/site-packages/rpmUtils/arch.pyR4     s6    	
t   ArchStoragec           B   sD   e  Z d  Z d   Z d e d  Z d d  Z d   Z d   Z	 RS(   sc   class for keeping track of what arch we have set and doing various 
       permutations based on itc         C   sD   d  |  _ d  |  _ d  |  _ g  |  _ g  |  _ t |  _ |  j   d  S(   N(	   RI   t	   canonarchR   RO   t   compatarchesRM   R>   t   multilibt
   setup_arch(   t   self(    (    s1   /usr/lib/python2.7/site-packages/rpmUtils/arch.pyt   __init__  s    						c         C   s   | r | |  _  n	 t |  _  t d |  j   |  _ t d |  j   |  _ | s g  } x9 |  j D]. } t |  sy | d k r[ | j |  q[ q[ W| |  _ n  t d |  j   |  _	 t
 d |  j   |  _ t d |  j   |  _ t d |  j   |  _ d  S(   NR1   RQ   R   R9   (   R   RG   R4   R   R?   RM   R3   R8   R2   RO   R   R   R   R=   t   legit_multi_arches(   R   R9   t   archlist_includes_compat_archt   limit_archlistt   a(    (    s1   /usr/lib/python2.7/site-packages/rpmUtils/arch.pyR     s    	c         C   s"   | s |  j  } n  t | d | S(   NR1   (   R   RL   (   R   RM   t   fromarch(    (    s1   /usr/lib/python2.7/site-packages/rpmUtils/arch.pyt   get_best_arch_from_list  s    c         C   s   t  |  j |  S(   N(   RD   R   (   R   R9   (    (    s1   /usr/lib/python2.7/site-packages/rpmUtils/arch.pyRH     s    c         C   s   | s |  j  St d |  S(   NRQ   (   RM   R?   (   R   R9   (    (    s1   /usr/lib/python2.7/site-packages/rpmUtils/arch.pyt   get_arch_list  s    N(
   t   __name__t
   __module__t   __doc__R   RI   R@   R   R   RH   R   (    (    (    s1   /usr/lib/python2.7/site-packages/rpmUtils/arch.pyR     s   			(   s   athlons   x86_64s   athlon(   s   sparcv9vs   sparcv9vs   sparc64v(   s   sparcv9s   sparcv9s   sparc64(   s   ppcs   ppcs   ppc64(   R   R	   R   (   s   ppcs   ppc64s   ppc64(   R   Rs   R^   R\   R@   R   RJ   R6   Rb   RI   R=   RC   RD   RH   R3   RL   R?   RX   Rj   Rq   Rv   R   R   R   R   RG   R   R2   R4   t   objectR   (    (    (    s1   /usr/lib/python2.7/site-packages/rpmUtils/arch.pyt   <module>   s   



		
	,								
(