
?Nc           @   sT  d  d l  Z  d  d l Z d  d l Z y
 e Z Wn/ e k
 r_ d  d l Z e j Z e j Z n Xd a	 d d  Z
 e d  Z d a e d  Z d a e d  Z d a e d  Z d a e d  Z e d  Z e d	  Z d
 e f d     YZ d e f d     YZ d   Z d   Z e d  Z d   Z d   Z e d k rPe   n  d S(   iNc         C   s   d d l  m } m } t s t j j d  r |   } y | j t d   Wn% t	 k
 ru } | GHt
 j d  n X| a q n  t r |  r y t j d |   } Wn | k
 r t  n X| Sd  S(   Ni(   t   SafeConfigParsert   NoOptionErrors!   /usr/share/python/debian_defaultsi   t   DEFAULT(   t   ConfigParserR    R   t	   _defaultst   ost   patht   existst   readfpt   filet   IOErrort   syst   exitt   gett
   ValueErrort   None(   t   nameR    R   t   configt   msgt   value(    (    s   /usr/share/python/pyversions.pyt   read_default   s"    	
c         C   sO  d d  l  } i | j d  6| j d 6| j d 6| j d 6| j d 6} i  } t g   } t t d t  t	 d t   } t
 } xJ|  j d  D]9} | j   } | d k r d | d <q n  | d k r | | d	 <q n  | j d t    t j d  }	 |	 j |  }
 y |
 s!t d   n  |
 j d  |
 j d  } } | j d  \ } } | d k rq| j |  n8 t } | | } g  | D] } | | |  r| ^ q} Wq t k
 rt d  q Xq W| r| r| | d <n  d | k rK| r	t |  | d <q| d =qKn5 d | k rK| | d <| rK| j |  | d <qKn  | S(   Nit   =s   >=s   <=s   <<t   version_onlyt   ,t   allt   currentt   current_extt   versionss   (>=|<=|<<|=)? *(\d\.\d)$s&   error parsing Python-Version attributei   i   t   .t   vexact(   s   currentR   (   NR   (   t   operatort   eqR   t   get   let   ltt   sett   supported_versionst   Truet   old_versionst   Falset   splitt   stript
   setdefaultt   ret   compilet   matchR   t   groupt   addt	   Exceptiont   union(   t   vstringt	   add_exactR   t	   operatorst   vinfot   exact_versionst   version_ranget
   relop_seent   fieldt   vet   mt   opt   vt   vmajt   vmint   filtopt   av(    (    s   /usr/share/python/pyversions.pyt   parse_versions    sX    


,
c         C   s   t  s[ y8 t d  } g  | j d  D] } | j   ^ q% a  Wq[ t k
 rW g  a  q[ Xn  |  r| g  t  D] } | d ^ qh St  Sd  S(   Ns   old-versionsR   i   (   t   _old_versionsR   R(   R)   R   (   R   R   t   sR=   (    (    s   /usr/share/python/pyversions.pyR&   V   s    ,c         C   s   t  s[ y8 t d  } g  | j d  D] } | j   ^ q% a  Wq[ t k
 rW g  a  q[ Xn  |  r| g  t  D] } | d ^ qh St  Sd  S(   Ns   unsupported-versionsR   i   (   t   _unsupported_versionsR   R(   R)   R   (   R   R   RD   R=   (    (    s   /usr/share/python/pyversions.pyt   unsupported_versionsd   s    ,c   
      C   s  t  sty8 t d  } g  | j d  D] } | j   ^ q% a  Wqtt k
 rpd d d d g } y= d d  l } | j | d d	 d
 t d | j } | j	 } Wn) t
 k
 r t j d j |   } n Xd  } xE | D]= } | j d  r | j d d	  d	 j   j d  } q q W| j   | rXg  | D] } t j d d |  ^ q.} | a  n  t  sqd d g a  qqqtXn  |  rg  t  D] }	 |	 d ^ qSt  Sd  S(   Ns   supported-versionsR   s   /usr/bin/apt-caches   --no-all-versionst   shows
   python-allit   bufsizei   t   shellt   stdoutt    s   Depends:t   :s   \s*(\S+)[ (]?.*s   \1s	   python2.6s	   python2.7i   (   t   _supported_versionsR   R(   R)   R   t
   subprocesst   PopenR'   t   PIPERJ   t   ImportErrorR   t   popent   joinR   t
   startswitht   closeR+   t   sub(
   R   R   RD   t   cmdRN   t   pt   fdt   dependst   lineR=   (    (    s   /usr/share/python/pyversions.pyR$   r   s6    ,,
(	c         C   s[  t  sEy t j d  a  } Wn t k
 r d  a  yL d d d g } d d  l } | j | d d d t d | j } | j	 } Wn  t
 k
 r t j d	  } n X| j   j   } | j   t j d
 |  r d | a  q n Xy t d  } Wn t k
 r
d } n Xt  | t j j d |  f k r<t d |  n  | a  n  |  rSt  d St  Sd  S(   Ns   /usr/bin/pythons   -cs!   import sys; print sys.version[:3]iRH   i   RI   RJ   s6   /usr/bin/python -c 'import sys; print sys.version[:3]'s   \d\.\d$t   pythons   default-versions	   python2.6s   /usr/binsZ   /usr/bin/python does not match the python default version. It must be reset to point to %si   (   t   _default_versionR   t   readlinkt   OSErrorR   RN   RO   R'   RP   RJ   RQ   RR   t   readlineR)   RU   R+   R-   R   R   R   RS   (   R   t   linkRW   RN   RX   RY   R[   t   debian_default(    (    s   /usr/share/python/pyversions.pyt   default_version   s6    

!	c         C   s  d  } t |  d t } t d t  } t |  d k r d | k rN | } qd | k ro t d t  g } qd | k r | d } q| d j |  } n3d | k r d | k r t d  nd | k rd | k r | d j |  } n t |  } d | k r| j	 | d  qn d | k rbt d t  } | | d k rVt d	  n  | g } no d | k szd | k rt   } d | k r| d j |  } n  d | k r| j	 | d  qn	 t d
  | st d   n  | r| Sg  | D] } d | ^ qSd  S(   NR3   R   i   R   R   R   R   s*   both `current' and `all' in version strings+   `current' version not in supported versionss$   No Python versions in version strings+   computed set of supported versions is emptys   python%s(
   R   RB   R%   R$   t   lenRc   t   intersectionR   R#   t   update(   R2   R   R   R5   t	   supportedR   R=   (    (    s   /usr/share/python/pyversions.pyt   requested_versions   sH    			c         C   s   d d  l  } t   } g  | j  d  D]0 } t j j |  | k r% t j j |  ^ q% } | j   |  r g  | D] } | d ^ qr S| Sd  S(   Nis   /usr/bin/python[0-9].[0-9]i   (   t   globR$   R   R   t   basenamet   sort(   R   Ri   Rg   RD   R   R=   (    (    s   /usr/share/python/pyversions.pyt   installed_versions   s    	0
t   ControlFileValueErrorc           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    s   /usr/share/python/pyversions.pyRm      s   t   MissingVersionValueErrorc           B   s   e  Z RS(    (   Rn   Ro   (    (    (    s   /usr/share/python/pyversions.pyRp      s   c         C   s  d } d } d } y t |  d  } Wn/ t k
 rV } d |  | f GHt j d  n Xx| D]} | j   } | d k r | d k r q^ n  | d k r Pn  d } q^ | j d  r d } q^ | j d |  r | } q^ | j d  s | j d	  r0| d k rt d
  n  | j d d  d j   } q^ | j d  r^ | | k rm| j d d  d j   } qmq^ q^ W| d k rt	 d  n  | d k r| d k rt
 d  n  | S| d k rt
 d |  n  | S(   s   read the debian/control file, extract the X-Python-Version or
    XS-Python-Version field; check that XB-Python-Version exists for the
    package.t   rs   Cannot open %s: %si   t    t   Sources   Source:s	   Package: s   XS-Python-Version:s   X-Python-Version:s3   attribute X(S)-Python-Version not in Source sectionRL   i   s   XB-Python-Version:s   not a control files+   missing X(S)-Python-Version in control files)   missing XB-Python-Version for package `%sN(   R   R	   R
   R   R   R)   RT   R   R(   Rm   Rp   (   t   fnt   pkgt   versiont   sversiont   sectiont   fpR   R[   (    (    s   /usr/share/python/pyversions.pyt   extract_pyversion_attribute   sN    				&	c         C   s]   g  |  j  d  D] } t |  ^ q } g  | j  d  D] } t |  ^ q8 } t | |  S(   NR   (   R(   t   intt   cmp(   t   ver1t   ver2t   it   v1t   v2(    (    s   /usr/share/python/pyversions.pyt   version_cmp  s    ((c         C   sa  g  } t  d t  } x |  j d  D] } | j d  } t |  d k r | d sg | d | d <n  | d s | d | d <n  x | D]` } yF t | | d  d k r t | | d  d k r | j |  n  Wq t k
 r q Xq Wq% | d | k r% | j | d  q% q% W| j t  | s7t d  n  | s]g  | D] } d | ^ qD} n  | S(	   NR   R   t   -i   i    is   empty set of versionsR\   (   R$   R%   R(   Rd   R   t   appendR   Rk   (   R2   R   R   t   py_supported_shortt   itemR=   t   verR   (    (    s   /usr/share/python/pyversions.pyt   requested_versions_bis#  s0    

 c         C   s   t  |   j   j d  } | S(   Ns   
(   R	   R`   t   rstrip(   Rt   R2   (    (    s   /usr/share/python/pyversions.pyt   extract_pyversion_attribute_bis>  s    c          C   s  d d l  m }  d } |  d |  } | j d d d d d	 d
 d d | j d d d d d	 d
 d d | j d d d d d	 d
 d d | j d d d d d	 d
 d d | j d d d d d t d	 d
 d d | j   \ } } t j j t j	 d  } | j
 r`t |  d k r`y t | j  GHWqt k
 r\} d | G| GHt j d  qXn| j rt |  d k rd  j t | j   GHnX| j rt |  d k rd  j t | j   GHn#| j rt |  d k rt |  d k r d! } n
 | d } y|t j j |  re| } y% t | d"  }	 t |	 | j  }
 Wqwt k
 rt j j d# | | f  t j d  qwt k
 r(t j j t j j |  d$  } t j j d% | | f  y" t |  }	 t |	 | j  }
 Wqbt  k
 r$t j j d& |  t | j  }
 qbXqwt k
 ra} t j j d' | | f  t j d(  qwXn t | | j  }
 d  j |
  GHWqt k
 r} t j j d' | | f  t j d  qXn' t j j d) | | f  t j d  d  S(*   Ni(   t   OptionParsersk   [-v] [-h] [-d|--default] [-s|--supported] [-i|--installed] [-r|--requested <version string>|<control file>]t   usages   -ds	   --defaultt   helps    print the default python versiont   actiont
   store_truet   destt   defaults   -ss   --supporteds#   print the supported python versionsRg   s   -rs   --requesteds   print the python versions requested by a build; the argument is either the name of a control file or the value of the X(S)-Python-Version attributet	   requesteds   -is   --installeds-   print the installed supported python versionst	   installeds   -vs	   --versions    print just the version number(s)R   i    s   %s:i   RK   s   debian/controlRs   s   %s: not a control file: %s, t
   pyversionssA   %s: missing X(S)-Python-Version in control file, fall back to %s
sD   %s: missing debian/pyversions file, fall back to supported versions
s   %s: %s
i   s   usage: %s %s
(!   t   optparseR   t
   add_optionR'   t
   parse_argsR   R   Rj   R   t   argvR   Rd   Rc   R   R   R   Rg   RS   R$   R   Rl   R   t   isfileRz   Rh   Rm   t   stderrt   writeRp   t   dirnameR   R   R
   (   R   R   t   parsert   optst   argst   programR   R   Rt   R2   t   vst   e(    (    s   /usr/share/python/pyversions.pyt   mainB  s    	
!t   __main__(    R   R+   R   R#   t   SetTypet	   NameErrort   setst   SetR   R   R   R'   RB   RC   R&   RE   RF   RM   R$   R]   Rc   Rh   Rl   R   Rm   Rp   Rz   R   R   R   R   Rn   (    (    (    s   /usr/share/python/pyversions.pyt   <module>   s8   $
	5! *	/			G