
    f2                        d dl Z d dlZd dlZdadadae j                  j                  dd      j                  d      D  cg c]%  } | j                         rd| j                         z  ' c} a
daddZd Zd Zdd	Zdd
ZddZddZddZddZddZ G d de      Z G d de      Zd Z	 d Zedk(  r e        yyc c} w )    NDEBPYTHON3_SUPPORTED ,python%sc                 (   ddl m}m} t        sTt        j
                  j                  d      r5 |       }t        d      }|j                  |       |j                          |at        r| r	 t        j                  d|       }|S y # |$ r t        w xY w)Nr   )ConfigParserNoOptionErrorz"/usr/share/python3/debian_defaultsDEFAULT)configparserr   r	   	_defaultsospathexistsopen	read_filecloseget
ValueError)namer   r	   configdefaultsfilevalues         !/usr/share/python3/py3versions.pyread_defaultr      s    877>>>?!^F DEL\* IT	MM)T2E   		s   ,B Bc                 D    t        d | j                  d      D              S )Nc              3   2   K   | ]  }t        |        y wN)int).0parts     r   	<genexpr>z#version_to_tuple.<locals>.<genexpr>(   s     :tT:   .)tuplesplit)versions    r   version_to_tupler'   '   s    :w}}S'9:::    c           
         t        | j                  d            dkD  rt        d      dd l}|j                  |j                  |j
                  |j                  |j                  d}i }t               }t        t        d            }d}| j                  d      D ]  }|j                         }|d	k(  r|d
v r|j                  dt                      t        j                  d      }|j                  |      }		 |	st        d      |	j                  d      |	j                  d      }}
|j                  d      \  }}t!        |      dk  r|
dv r|j#                  |       n2d}||
   }|D cg c]   } |t%        |      t%        |            s|" }} d|v r||d<   |r|j)                  |      |d<   |S c c}w # t&        $ r t        d      w xY w)Nr      zDtoo many arguments provided for X-Python3-Version: min and max only.r   )N=z>=z<=z<<Tversion_onlyFall)currentcurrent_extversionsz(>=|<=|<<|=)? *(\d\.\d+)$z'error parsing Python3-Version attribute   r#      )Nr+   )lenr%   r   operatoreqgeleltsetsupported_versionsstrip
setdefaultrecompilematchgroupr   addr'   	Exceptionunion)vstringr5   	operatorsvinfoexact_versionsversion_range
relop_seenfieldvemopvvmajvminfiltopavs                   r   parse_versionsrT   +   s   
7=="_``{{{{(++{{$I EUN*=>MJs# HE>..SU+ZZ45HHUO	H !JKKGGAJ
BJD$4y1}[ ""1%!
"2.; !@v$R(*:1*=@? !@ !@+H2 U*j . 4 4] CE*L!@ 	HFGG	Hs+   :AF<!F<- F7F7F<7F<<Gc                     t         s9	 t        d      }|j                  d      D cg c]  }|j                          c}a | rt         D cg c]  }|dd  	 c}S t         S c c}w # t        $ r g a Y 1w xY wc c}w )Nzold-versionsr      )_old_versionsr   r%   r<   r   r-   r   srO   s       r   old_versionsrZ   V   ss    	 0E05C0@A1QWWYAM ,-!!"-- B 	M	 .'   A$ AA$ 
A5A$ $A21A2c                     t         s9	 t        d      }|j                  d      D cg c]  }|j                          c}a | rt         D cg c]  }|dd  	 c}S t         S c c}w # t        $ r g a Y 1w xY wc c}w )Nzunsupported-versionsr   rV   )_unsupported_versionsr   r%   r<   r   rX   s       r   unsupported_versionsr^   d   sv     	' !78E8=C8H$I1QWWY$I! 45!!"55$$ %J 	'$&!	' 6r[   c           	         t                t        s9	 t        d      }|j                  d      D cg c]  }|j	                          c}at        j%                  t        j'                  t(                    }	t        j+                          t        j-                  |	       | rt        D 
cg c]  }
|
dd  	 c}
S t        S c c}w # t
        $ r g d}	 dd l}|j                  |dd|j                        }|j                  }n3# t        $ r' t        j                  dj                  |            }Y nw xY wd }|D ]F  }|j                  d	      s|j                  d
d      d   j	                         j                  d      }H |j                          |D cg c]  }t!        j"                  dd|       nc c}w }}|aY vw xY wc c}
w )Nzsupported-versionsr   )z/usr/bin/apt-cachez--no-all-versionsshowzpython3-allr   r2   F)bufsizeshellstdout zDepends::z\s*(\S+)[ (]?.*z\1rV   )default_version_supported_versionsr   r%   r<   r   
subprocessPopenPIPErc   ImportErrorr   popenjoin
startswithr   r>   subpopindex_default_versionsortappend)r-   r   rY   cmdrh   pfddependslinedefaultrO   s              r   r;   r;   r   s   	* !56E6;kk#6F"G1779"G$ "%%&9&?&?@P&QRGw'23!!"33""1 #H 	**C-!$$S!+0 % JXX -XXchhsm,-G G??:."jja0399;AA#FGG HHJELMrvv0%;MMGM")!	** 4s_   C B>C )G>C G/D G-D1.G0D11GAGF43
G Gc                     t         st        j                  d      a t        d      }t         |t        j                  j                  d|      fvrt        d|z        |a | r	t         dd  S t         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 %srV   )rr   r   readlinkr   r   rm   r   )r-   debian_defaults     r   rf   rf      st    ;;'9:!"34NZ0XYY *,:; < 	< &##r(   c                    t                d }t        |       }t        d      }t        |      dk(  rz|d   j	                  |      }g }|D ]  }|j                  |        	 |j                  |j                  t        dd              }|j                          |r|j                  |       nt        d      |st        d      |r|S |D cg c]  }d	|z  	 c}S #  d}Y YxY wc c}w )
NTr,   r2   r1   rV   r   z/No supported python3 versions in version stringzempty set of versionsr   )rf   rT   r;   r4   intersectionrt   rp   rq   rr   rs   r   )	rE   r-   r1   rG   	supportedvlr&   rz   rO   s	            r   requested_versionsr      s    H7#E"5I
5zQ$11)<3G7!33	ffRXX&6qr&:;<G 		IIgJKK011	(*+1
Q++	G ,s   !'C C$C!c                 \   dd l }t               }|j                  d      |j                  d      z   D cg c]B  }t        j                  j	                  |      |v rt        j                  j	                  |      D }}|j                          | r|D cg c]  }|dd  	 c}S |S c c}w c c}w )Nr   z/usr/bin/python3.[0-9]z/usr/bin/python3.[0-9][0-9]rV   )globr;   r   r   basenamers   )r-   r   r   rY   r1   rO   s         r   installed_versionsr      s    "$I#;<tyyIf?gg577##A&)3   # 5H 5 MMO'(!!"((5
 )s   AB$B)c                 R    t        d      } | d |D              }d|z  }|r|S d|z   S )NTc              3   2   K   | ]  }t        |        y wr   )r'   )r   vers     r   r!   z+minmax_supported_version.<locals>.<genexpr>   s     Ns%c*Nr"   z%d.%dpython)r;   )minmaxr-   supported_versions_listr&   version_strs        r   minmax_supported_versionr      s<    06N6MNNGG#K+%%r(   c                       e Zd Zy)ControlFileValueErrorN__name__
__module____qualname__ r(   r   r   r          r(   r   c                       e Zd Zy)MissingVersionValueErrorNr   r   r(   r   r   r      r   r(   r   c                    d}d}d}t        | d      5 }|D cg c]  }|j                          }}ddd       D ]  }|dk(  r|dk7  r
|dk(  r nd}|j                  d      rd}+|j                  d|z         r|}B|j                         j                  d      sb|dk7  rt	        d	      |j                  d
d      d   j                         } |t        d      |dk(  r|t        d      |S |S c c}w # 1 sw Y   xY w)zFread the debian/control file, extract the X-Python3-Version
    field.Nzutf-8)encodingr   SourcezSource:z	Package: zx-python3-version:z1attribute X-Python3-Version not in Source sectionre   r2   znot a control filez$no X-Python3-Version in control file)r   r<   rn   lowerr   r%   r   r   )fnpkgr&   sversionsectioncontrolfilery   liness           r   extract_pyversion_attributer      s!    GHG	b7	# 7{*56$667 52:'T/hG__Y'G__[3./GZZ\$$%9:(" !TUUzz#q)!,224H5 #$899
h*+QRRN) 77 7s   C;C6C;6C;;Dc                  Z   ddl m}  d}	  | |      }|j                  ddddd	
       |j                  ddddd
       |j                  ddddd
       |j                  ddddd
       |j                  dddd
       |j                  dddd
       |j                  dddd dd!"       |j                         \  }}t        j
                  j                  t        j                  d         }|j                  r.t        |      dk(  r 	 t        t        |j                               y |j                   r<t        |      dk(  r.t        d%j#                  t%        |j                                     y |j&                  r<t        |      dk(  r.t        d%j#                  t)        |j                                     y |j*                  r2t        |      dk(  r$t        t-        t.        |j                               y |j0                  r2t        |      dk(  r$t        t-        t2        |j                               y |j4                  rt        |      d$k  rt        |      dk(  rd&}n|d   }	 t        j
                  j7                  |      r&|}	 t9        |d'      }	t;        |	|j                        }
nt;        ||j                        }
t        d%j#                  
             y t        j>                  jA                  d-|d%|d,       t        j                  d$       y # t        $ r.}t        d#|z  |       t        j                  d$       Y d }~y d }~ww xY w# t<        $ r= t        j>                  jA                  |d(|d)       t        j                  d$       Y tB        $ r; t        j>                  jA                  d*|z         t%        |j                        }
Y w xY w# t        $ rD}t        j>                  jA                  |d+|d,       t        j                  d$       Y d }~y d }~ww xY w).Nr   )OptionParserz;[-v] [-h] [-d|--default] [-s|--supported] [-i|--installed] )usagez-dz	--defaultz!print the default python3 version
store_truerz   )helpactiondestz-sz--supportedz$print the supported python3 versionsr   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--min-supportedz+print the minimum supported python3 versionminsupportedz--max-supportedz+print the maximum supported python3 versionmaxsupportedz-vz	--versionz print just the version number(s)Fr-   )r   rz   r   r   z%s:r2   rd   zdebian/controlr   z: not a control file: z, zC%s: no X-Python3-Version in control file, using supported versions
z: 
zusage: )"optparser   
add_option
parse_argsr   r   r   sysargvrz   r4   printrf   r-   r   exitr   rm   r;   r   r   r   r   minr   maxr   isfiler   r   r   stderrwriter   )r   r   parseroptsargsprogrammsgr1   r   rE   vss              r   mainr     s   %IE6&F
dK>)	  ; dMA)  = dMM *	  =
 dMK)  = 'H)  @ 'H)  @ dK=#L~  O ""$JD$ggsxx{+G||D	Q	/$"3"345 
CINchh)$*;*;<=>	CINchh)$*;*;<=>			s4yA~&sD,=,=>?			s4yA~&sD,=,=>?	CINt9>'HAwH	ww~~h'?9"hGG+GT5F5FGB ($2C2CD#((2,
 	

We<=O  	%'/3'HHQKK	, -  JJ$$(/&5 6HHQK/ ?JJ$$ &H%,&- . ,D,=,=>B	?  	JJ7C89HHQKK	sa   
L &!O "M *1O 	M!$M

MAOO ?OO OO 	P*&:P%%P*__main__r   )F)r   r>   r   r   rW   r]   environr   r%   r<   rg   rr   r   r'   rT   rZ   r^   r;   rf   r   r   r   r   r   r   r   r   r   )r   s   0r   <module>r      s    
 	 
	 zz~~&<bAGGL'C))+ "CIIK/ '   (;(V%#B ",6
&	J 		z 	><IV zF y
's    *C 