
    9bh2                        S SK r S SKrS SKrSqSqSq\ R                  R                  SS5      R                  S5       V s/ s H-  n U R                  5       (       d  M  SU R                  5       -  PM/     sn q
SqSS jrS rS rSS	 jrSS
 jrSS jrSS jrSS jrSS jrSS jr " S S\5      r " S S\5      rS r S r\S:X  a  \" 5         ggs  sn f )    NDEBPYTHON3_SUPPORTED ,python%sc                 R   SSK JnJn  [        (       dY  [        R
                  R                  S5      (       a5  U" 5       n[        S5      nUR                  U5        UR                  5         Uq[        (       a   U (       a   [        R                  SU 5      nU$ g ! U a    [        ef = f)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977>>>??!^F DEL\* IyT	MM)T2E   		s    B B&c                 D    [        S U R                  S5       5       5      $ )Nc              3   8   #    U  H  n[        U5      v   M     g 7fN)int).0parts     r   	<genexpr>#version_to_tuple.<locals>.<genexpr>(   s     :'9tT'9   .)tuplesplit)versions    r   version_to_tupler(   '   s    :w}}S'9:::    c           
         [        U R                  S5      5      S:  a  [        S5      eSS KnUR                  UR                  UR
                  UR                  UR                  S.n0 n[        5       n[        [        SS95      nSnU R                  S5       GH  nUR                  5       nUS	:X  a  M  US
;   a  M$  UR                  S[        5       5        [        R                  " S5      nUR                  U5      n	 U	(       d  [        S5      eU	R                  S5      U	R                  S5      pUR                  S5      u  p[!        U5      S:  a  M  U
S;   a  UR#                  U5        M  SnX*   nU Vs/ s H&  o" [%        U5      [%        U5      5      (       d  M$  UPM(     nnGM     SU;   a  XCS'   U(       a  UR)                  U5      US'   U$ s  snf ! [&         a    [        S5      ef = f)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)vstringr6   	operatorsvinfoexact_versionsversion_range
relop_seenfieldvemopvvmajvminfiltopavs                   r   parse_versionsrU   +   s   
7=="_``{{{{(++{{$I EUN*=>MJs#E>..SU+ZZ45HHUO	H !JKKGGAJ
JD4y1}[ ""1%!
".; !@mv$R(*:1*=@?m !@+ $2 U*j . 4 4] CE*L!@ 	HFGG	Hs1   ?AGG/
G9#G G&GGG/c                    [         (       d;   [        S5      nUR                  S5       Vs/ s H  o"R                  5       PM     snq U (       a  [          Vs/ s H  o3SS  PM	     sn$ [         $ s  snf ! [         a    / q  N9f = fs  snf )Nzold-versionsr      )_old_versionsr   r&   r=   r   r.   r   srP   s       r   old_versionsr[   V   s{    =	 0E05C0@A0@1WWY0@AM ,-}!!"}-- B 	M	 .(   A2 A-A2 B-A2 2B Bc                    [         (       d;   [        S5      nUR                  S5       Vs/ s H  o"R                  5       PM     snq U (       a  [          Vs/ s H  o3SS  PM	     sn$ [         $ s  snf ! [         a    / q  N9f = fs  snf )Nzunsupported-versionsr   rW   )_unsupported_versionsr   r&   r=   r   rY   s       r   unsupported_versionsr_   d   s      	' !78E8=C8H$I8H1WWY8H$I! 454!!"455$$ %J 	'$&!	' 6r\   c           	         [        5         [        (       d;   [        S5      nUR                  S5       Vs/ s H  o"R	                  5       PM     snq[        R%                  [        R'                  [(        5      5      n	[        R+                  5         [        R-                  U	5        U (       a  [         V
s/ s H  oSS  PM	     sn
$ [        $ s  snf ! [
         Ga     / SQn SS KnUR                  USSUR                  S9nUR                  nO5! [         a(    [        R                  " SR                  U5      5      n Of = fS nU HM  nUR                  S	5      (       d  M  UR                  S
S5      S   R	                  5       R                  S5      nMO     UR                  5         U Vs/ s H  n[         R"                  " SSU5      PM     Os  snf nnUq GNf = fs  sn
f )Nzsupported-versionsr   )z/usr/bin/apt-cachez--no-all-versionsshowzpython3-allr   r3   F)bufsizeshellstdout zDepends::z\s*(\S+)[ (]?.*z\1rW   )default_version_supported_versionsr   r&   r=   r   
subprocessPopenPIPErd   ImportErrorr   popenjoin
startswithr   r?   subpopindex_default_versionsortappend)r.   r   rZ   cmdri   pfddependslinedefaultrP   s              r   r<   r<   r   s   	* !56E6;kk#6F"G6F7796F"G$ "%%&9&?&?@P&QRGw'232!!"233""1 #H 	**C-!$$S!+0 % JXX -XXchhsm,-G??:.."jja0399;AA#FG  HHJELMWrvv0%;WMGM")!	** 4s_   C CC 5GC G!,DG/E =G?E  G"A
G,"G
GGc                     [         (       d  [        R                  " S5      q [        S5      n[         U[        R                  R                  SU5      4;  a  [        SU-  5      eUq U (       a	  [         S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 %srW   )rs   r   readlinkr   r   rn   r   )r.   debian_defaults     r   rg   rg      sw    ;;'9:!"34NZ0XYY *,:; < 	< &##r)   c                    [        5         S n[        U 5      n[        SS9n[        U5      S:X  a  US   R	                  U5      n/ nU H  oeR                  U5        M      UR                  UR                  [        SS  5      5      nUR                  5         U(       a  UR                  U5        O[        S5      eU(       d  [        S5      eU(       a  U$ U Vs/ s H  nS	U-  PM
     sn$ !   Sn Nk= fs  snf )
NTr-   r3   r2   rW   r   z/No supported python3 versions in version stringzempty set of versionsr   )rg   rU   r<   r5   intersectionru   rq   rr   rs   rt   r   )	rF   r.   r2   rH   	supportedvlr'   r{   rP   s	            r   requested_versionsr      s    H7#E"5I
5zQ$11)<G7!3x	ffRXX&6qr&:;<G 		IIgJKK011	(*+1
Q++	G ,s    'C, C5,C2c                 x   SS K n[        5       nUR                  S5      UR                  S5      -    Vs/ s HG  n[        R                  R	                  U5      U;   d  M(  [        R                  R	                  U5      PMI     nnUR                  5         U (       a  U Vs/ s H  oUSS  PM	     sn$ U$ s  snf s  snf )Nr   z/usr/bin/python3.[0-9]z/usr/bin/python3.[0-9][0-9]rW   )globr<   r   r   basenamert   )r.   r   r   rZ   r2   rP   s         r   installed_versionsr      s    "$I#;<tyyIf?gg5gA77##A&)3 $  #g  5 MMO'(x!!"x((5
 )s   'B2#B2B7c                 \    [        S5      nU " S U 5       5      nSU-  nU(       a  U$ SU-   $ )NTc              3   8   #    U  H  n[        U5      v   M     g 7fr   )r(   )r   vers     r   r!   +minmax_supported_version.<locals>.<genexpr>   s     N6Ms%c**6Mr#   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                       \ rS rSrSrg)ControlFileValueError    N__name__
__module____qualname____firstlineno____static_attributes__r   r)   r   r   r          r)   r   c                       \ rS rSrSrg)MissingVersionValueError   r   Nr   r   r)   r   r   r      r   r)   r   c                 N   SnSnSn[        U SS9 nU Vs/ s H  ofR                  5       PM     nnSSS5        W H  nUS:X  a  US:w  a  US:X  a    OSnM  UR                  S5      (       a  SnM5  UR                  SU-   5      (       a  UnMR  UR                  5       R                  S5      (       d  Mx  US:w  a  [	        S	5      eUR                  S
S5      S   R                  5       nM     Uc  [        S5      eUS:X  a  Uc  [        S5      eU$ U$ s  snf ! , (       d  f       N= f)zBread 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 sectionrf   r3   znot a control filez$no X-Python3-Version in control file)r   r=   ro   lowerr   r&   r   r   )fnpkgr'   sversionsectioncontrolfilerz   liness           r   extract_pyversion_attributer      s    GHG	b7	#{*56+$+6 
$2:'T/hG__Y''G__[3.//GZZ\$$%9::(" !TUUzz#q)!,224H  #$899
h*+QRRN) 7 
$	#s   DDDD
D$c            	         SSK Jn   Sn U " US9nUR                  SSSSS	S
9  UR                  SSSSSS
9  UR                  SSSSSS
9  UR                  SSSSSS
9  UR                  SSSSS
9  UR                  SSSSS
9  UR                  SSSS SS!S"9  UR                  5       u  p4[        R
                  R                  [        R                  S   5      nUR                  (       a/  [        U5      S:X  a    [        [        UR                  5      5        g UR                   (       a=  [        U5      S:X  a.  [        S%R#                  [%        UR                  5      5      5        g UR&                  (       a=  [        U5      S:X  a.  [        S%R#                  [)        UR                  5      5      5        g UR*                  (       a3  [        U5      S:X  a$  [        [-        [.        UR                  5      5        g UR0                  (       a3  [        U5      S:X  a$  [        [-        [2        UR                  5      5        g UR4                  (       a  [        U5      S$::  a  [        U5      S:X  a  S&nOUS   n [        R
                  R7                  U5      (       a%  Un [9        US'5      n	[;        XR                  5      n
O[;        XsR                  5      n
[        S%R#                  W
5      5        g [        R>                  RA                  S-U< S%U< S,35        [        R                  " S$5        g ! [         a/  n[        S#U-  U5        [        R                  " S$5         S nAg S nAff = f! [<         a@    [        R>                  RA                  U< S(U< S)35        [        R                  " S$5         N[B         a;    [        R>                  RA                  S*U-  5        [%        UR                  5      n
 GN"f = f! [         aG  n[        R>                  RA                  U< S+U< S,35        [        R                  " S$5         S nAg S nAff = f).Nr   )OptionParserz;[-v] [-h] [-d|--default] [-s|--supported] [-i|--installed] )usagez-dz	--defaultz!print the default python3 version
store_truer{   )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   r{   r   r   z%s:r3   re   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argvr{   r5   printrg   r.   r   exitr   rn   r<   r   r   r   r   minr   maxr   isfiler   r   r   stderrwriter   )r   r   parseroptsargsprogrammsgr2   r   rF   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+G5F5FGB (2C2CD#((2,
 	

We<=O  	%'/3'HHQKK	, -  JJ$$(/&5 6HHQK/ ?JJ$$ &H%,&- . ,D,=,=>B	?  	JJ7C89HHQKK	sb   7L* 2&O6 !M& :0O6 *
M#4%MM#&AO3-O6 /A O3/O6 2O33O6 6
Q =QQ__main__r   )F)r   r?   r   r   rX   r^   environr   r&   r=   rh   rs   r   r(   rU   r[   r_   r<   rg   r   r   r   r   r   r   r   r   r   )r   s   0r   <module>r      s    
 	 
	 zz~~&<bAGGL'L 58))+ 0zCIIK/L'   (;(V%#B ",6
&	J 		z 	><IV zF y
's    CC