
.S+                 @   s:  d  d l  Z  d  d l Z d  d l Z d a d a d a d d   e  j j d d  j d  D a	 d a
 d d d  Z d	 d
   Z d d d  Z d d d  Z d d d  Z d d d  Z d d d  Z d d d  Z Gd d   d e  Z Gd d   d e  Z d d   Z d d   Z e d  k r6e   n  d S)!    Nc             C   s,   g  |  ]" } | j    r d  | j     q S)zpython%s)strip).0Zver r   !/usr/share/python3/py3versions.py
<listcomp>
   s   	 r   ZDEBPYTHON3_SUPPORTED ,c             C   s   d d l  m } m } t sf t j j d  rf |   } t d  } | j |  | j	   | a qf n  t r |  r y t j
 d |   } Wn | k
 r t  Yn X| Sd  S)Nr   )ConfigParserNoOptionErrorz"/usr/share/python3/debian_defaultsZDEFAULT)Zconfigparserr	   r
   	_defaultsospathexistsopenZ	read_filecloseget
ValueError)namer	   r
   configZdefaultsfilevaluer   r   r   read_default   s    	
r   c                s  t  |  j d   d k r* t d   n  d d  l } i | j d  6| j d 6| j d 6| j d 6| j d 6} i  } t   } t t	 d	 d
   } d } xF|  j d  D]5} | j
   } | d k r q n  | d k r q n  | j d t    t j d  } | j |  }	 y |	 s't d   n  |	 j d  |	 j d  }
   j d  \ } } t |  d k  rsw n  |
 d k r| j   n, d
 } | |
      f d d   | D } Wq t k
 rt d   Yq Xq Wd | k r| | d <| r| j |  | d <qn  | S)Nr      zDtoo many arguments provided for X-Python3-Version: min and max only.r   =z>=z<=z<<version_onlyTFallcurrentcurrent_extversionsz(>=|<=|<<|=)? *(\d\.\d)$z'error parsing Python3-Version attribute   .   c                s%   g  |  ] }   |   r |  q Sr   r   )r   av)filtopvr   r   r   G   s   	 z"parse_versions.<locals>.<listcomp>)r   r   )Nr   )lensplitr   operatoreqgeleltsetsupported_versionsr   
setdefaultrecompilematchgroupintadd	Exceptionunion)vstringr&   Z	operatorsvinfoZexact_versionsZversion_rangeZ
relop_seenZfieldZvemopZvmajZvminr   )r"   r#   r   parse_versions'   sL    	
 
r:   Fc             C   so   t  sP y, t d  } d d   | j d  D a  WqP t k
 rL g  a  YqP Xn  |  rg d d   t  D St  Sd  S)Nzold-versionsc             S   s   g  |  ] } | j     q Sr   )r   )r   sr   r   r   r   V   s   	 z old_versions.<locals>.<listcomp>r   c             S   s    g  |  ] } | d  d   q S)   Nr   )r   r#   r   r   r   r   Z   s   	 )_old_versionsr   r%   r   )r   r   r   r   r   old_versionsQ   s     r>   c             C   so   t  sP y, t d  } d d   | j d  D a  WqP t k
 rL g  a  YqP Xn  |  rg d d   t  D St  Sd  S)Nzunsupported-versionsc             S   s   g  |  ] } | j     q Sr   )r   )r   r;   r   r   r   r   d   s   	 z(unsupported_versions.<locals>.<listcomp>r   c             S   s    g  |  ] } | d  d   q S)r<   Nr   )r   r#   r   r   r   r   h   s   	 )_unsupported_versionsr   r%   r   )r   r   r   r   r   unsupported_versions_   s     r@   c             C   sV  t  s7y, t d  } d d   | j d  D a  Wq7t k
 r3d d d d g } y= d	 d  l } | j | d
 d d d d | j } | j } Wn* t k
 r t	 j
 d j |   } Yn Xd  } xE | D]= } | j d  r | j d d  d j   j d  } q q W| j   d d   | D } | a  Yq7Xn  |  rNd d   t  D St  Sd  S)Nzsupported-versionsc             S   s   g  |  ] } | j     q Sr   )r   )r   r;   r   r   r   r   r   s   	 z&supported_versions.<locals>.<listcomp>r   z/usr/bin/apt-cachez--no-all-versionsZshowzpython3-allr   bufsizer   shellFstdout zDepends::c             S   s%   g  |  ] } t  j d  d |   q S)z\s*(\S+)[ (]?.*z\1)r.   sub)r   r;   r   r   r   r      s   	 c             S   s    g  |  ] } | d  d   q S)r<   Nr   )r   r#   r   r   r   r      s   	 )_supported_versionsr   r%   r   
subprocessPopenPIPErC   ImportErrorr   popenjoin
startswithr   r   )r   r   cmdrH   pfdZdependsliner   r   r   r,   m   s0     ,
r,   c             C   sz   t  s t j d  a  n  t d  } t  | t j j d |  f k rX t d |   n  | a  |  rr t  d d   St  Sd  S)Nz/usr/bin/python3zdefault-versionz/usr/binzkthe symlink /usr/bin/python3 does not point to the python3 default version. It must be reset to point to %sr<   )_default_versionr   readlinkr   r   rM   r   )r   Zdebian_defaultr   r   r   default_version   s    !rU   c             C   s   d  } t  |   } t d d  } t |  d k rI | d j |  } n t d   | sj t d   n  | rt | Sd d   | D Sd  S)	Nr   Tr   r   z%No python3 versions in version stringzempty set of versionsc             S   s   g  |  ] } d  |  q S)zpython%sr   )r   r#   r   r   r   r      s   	 z&requested_versions.<locals>.<listcomp>)r:   r,   r$   intersectionr   )r6   r   r   r7   	supportedr   r   r   requested_versions   s    rX   c                s`   d d  l  } t       f d d   | j  d  D } | j   |  rX d d   | D S| Sd  S)Nr   c                s:   g  |  ]0 } t  j j |    k r t  j j |   q Sr   )r   r   basename)r   r;   )rW   r   r   r      s   	z&installed_versions.<locals>.<listcomp>z/usr/bin/python3.[0-9]c             S   s    g  |  ] } | d  d   q S)r<   Nr   )r   r#   r   r   r   r      s   	 )globr,   sort)r   rZ   r   r   )rW   r   installed_versions   s    	
r\   c               @   s   e  Z d  Z d S)ControlFileValueErrorN)__name__
__module____qualname__r   r   r   r   r]      s   r]   c               @   s   e  Z d  Z d S)MissingVersionValueErrorN)r^   r_   r`   r   r   r   r   ra      s   ra   c          
   C   sC  d } d } d } t  |  d d  } d d   | D } Wd QXx | D] } | d k rr | d k ri Pn  d } qG | j d  r d } qG | j d	 |  r | } qG | j   j d
  rG | d k r t d   n  | j d d  d j   } qG qG W| d k rt d   n  | d k r?| d k r;t d   n  | S| S)zFread the debian/control file, extract the X-Python3-Version
    field.Nencodingzutf-8c             S   s   g  |  ] } | j     q Sr   )r   )r   rR   r   r   r   r      s   	 z/extract_pyversion_attribute.<locals>.<listcomp>r   SourcezSource:z	Package: zx-python3-version:z1attribute X-Python3-Version not in Source sectionrE   r   znot a control filez$no X-Python3-Version in control file)r   rN   lowerr   r%   r   r]   ra   )fnpkgversionZsversionZsectionZcontrolfilelinesrR   r   r   r   extract_pyversion_attribute   s2    			#ri   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 d d	 d
 d d | j   \ } } t j j t j d  } | j	 r{t
 |  d k r{y t t | j   Wqt k
 rw} z# t d | |  t j d  WYd  d  } ~ XqXn| j rt
 |  d k rt d  j t | j    n| j rt
 |  d k rt d  j t | j    n| j rZt
 |  d k rZt
 |  d k r%d! } n
 | d } y t j j |  r| } y% t | d"  }	 t |	 | j  }
 Wqt k
 rt j j d# | | f  t j d  Yqt k
 rt j j d$ |  t | j  }
 YqXn t | | j  }
 t d  j |
   Wqt k
 rV} z, t j j d% | | f  t j d  WYd  d  } ~ XqXn' t j j d& | | f  t j d  d  S)'Nr   )OptionParserz;[-v] [-h] [-d|--default] [-s|--supported] [-i|--installed] usagez-dz	--defaulthelpz!print the default python3 versionaction
store_truedestdefaultz-sz--supportedz$print the supported python3 versionsrW   z-rz--requestedzprint the python3 versions requested by a build; the argument is either the name of a control file or the value of the X-Python3-Version attribute	requestedz-iz--installedz.print the installed supported python3 versions	installedz-vz	--versionz print just the version number(s)Fr   z%s:r   rD   zdebian/controlrc   z%s: not a control file: %s, zC%s: no X-Python3-Version in control file, using supported versions
z%s: %s
zusage: %s %s
)Zoptparserj   Z
add_option
parse_argsr   r   rY   sysargvrp   r$   printrU   r   r   exitrW   rM   r,   rr   r\   rq   isfileri   rX   r]   stderrwritera   )rj   rk   parserZoptsargsZprogrammsgr   re   r6   Zvsr   r   r   main   sn    #	
#r~   __main__)r   r.   rt   r   r=   r?   environr   r%   rG   rS   r   r:   r>   r@   r,   rU   rX   r\   r   r]   ra   ri   r~   r^   r   r   r   r   <module>   s,   	"*=A