
    ґ2d2                     T   d dl Z d dlZd dlZdadadad e j                            dd                              d          D             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             dS dS )    Nc                 d    g | ]-}|                                 d |                                 z  .S zpython%sstrip.0vers     !/usr/share/python3/py3versions.py
<listcomp>r   
   sA     ' ' 'C))++'zCIIKK/ ' ' '    DEBPYTHON3_SUPPORTED ,c                 Z   ddl m}m} t          sct          j                            d          rD |            }t          d          }|                    |           |	                                 |at          r1| r/	 t          
                    d|           }n# |$ r t          w xY w|S d S )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         r
   read_defaultr"      s    88888888 7>>>?? 	!\^^F DEEL\***   I T 	MM)T22EE 	 	 		4s   =B B&c                 Z    t          d |                     d          D                       S )Nc              3   4   K   | ]}t          |          V  d S N)int)r   parts     r
   	<genexpr>z#version_to_tuple.<locals>.<genexpr>(   s(      ::tT::::::r   .)tuplesplit)versions    r
   version_to_tupler-   '   s+    ::w}}S'9'9::::::r   c                    t          |                     d                    dk    rt          d          dd l}|j        |j        |j        |j        |j        d}i }t                      }t          t          d                    }d}|                     d          D ]'}|
                                }|d	k    r|d
v r#|                    dt                                 t          j        d          }|                    |          }		 |	st          d          |	                    d          |	                    d          c}
                    d          \  }}t!          |          dk     r|
dv r|                               nd}||
         fd|D             }# t$          $ r t          d          w xY wd|v r||d<   |r|                    |          |d<   |S )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)      )Nr0   c                 `    g | ]*} t          |          t                              (|+S  r-   )r   avfiltopvs     r
   r   z"parse_versions.<locals>.<listcomp>K   sW     !@ !@ !@vv$R((*:1*=*=@? @? !@ !@ !@ !@r   )lenr+   r   operatoreqgeleltsetsupported_versionsr   
setdefaultrecompilematchgroupr&   add	Exceptionunion)vstringr@   	operatorsvinfoexact_versionsversion_range
relop_seenfieldvemopvmajvminr=   r>   s                @@r
   parse_versionsr[   +   s:   
7==""_```OOO{{(+{$ $I EUUN*===>>MJs## H HE>>...SUU+++Z455HHUOO	H L !JKKKGGAJJ

EBJD$4yy1}}[  ""1%%%%!
"2!@ !@ !@ !@ !@m !@ !@ !@ 	H 	H 	HFGGG	HU*j 	D . 4 4] C CE*Ls   A'F-83F--GFc                     t           sB	 t          d          }d |                    d          D             a n# t          $ r g a Y nw xY w| rd t           D             S t           S )Nzold-versionsc                 6    g | ]}|                                 S r:   r   r   ss     r
   r   z old_versions.<locals>.<listcomp>[   s     AAA1QWWYYAAAr   r   c                 "    g | ]}|d d         S    Nr:   r   r>   s     r
   r   z old_versions.<locals>.<listcomp>_   s     ---!!""---r   )_old_versionsr"   r+   r   r2   r!   s     r
   old_versionsrf   V   s     	 00EAAC0@0@AAAMM 	 	 	MMM	 --}----   .8 AAc                     t           sB	 t          d          }d |                    d          D             a n# t          $ r g a Y nw xY w| rd t           D             S t           S )Nzunsupported-versionsc                 6    g | ]}|                                 S r:   r   r^   s     r
   r   z(unsupported_versions.<locals>.<listcomp>i   s     $I$I$I1QWWYY$I$I$Ir   r   c                 "    g | ]}|d d         S ra   r:   rc   s     r
   r   z(unsupported_versions.<locals>.<listcomp>m   s     555!!""555r   )_unsupported_versionsr"   r+   r   re   s     r
   unsupported_versionsrl   d   s      '	' !788E$I$IC8H8H$I$I$I!! 	' 	' 	'$&!!!	' %5545555$$rg   c                    t                       t          s%	 t          d          }d |                    d          D             an# t          $ r g d}	 dd l}|                    |dd|j                  }|j        }n7# t          $ r* t          j        d	                    |                    }Y nw xY wd }|D ]X}|                    d
          rA|                    dd          d                                                             d          }Y|                                 d |D             }|aY nw xY wt                              t                              t$                              }t                                           t                              |           | rd t          D             S t          S )Nzsupported-versionsc                 6    g | ]}|                                 S r:   r   r^   s     r
   r   z&supported_versions.<locals>.<listcomp>x   s     "G"G"G17799"G"G"Gr   r   )z/usr/bin/apt-cachez--no-all-versionsshowzpython3-allr   r7   F)bufsizeshellstdout zDepends::c                 :    g | ]}t          j        d d|          S )z\s*(\S+)[ (]?.*z\1)rH   subr^   s     r
   r   z&supported_versions.<locals>.<listcomp>   s'    MMMrv0%;;MMMr   c                 "    g | ]}|d d         S ra   r:   rc   s     r
   r   z&supported_versions.<locals>.<listcomp>   s     333!!""333r   )default_version_supported_versionsr"   r+   r   
subprocessPopenPIPErr   ImportErrorr   popenjoin
startswithr   r   popindex_default_versionsortappend)	r2   r!   cmdrz   pfddependslinedefaults	            r
   rF   rF   r   s    *	* !566E"G"Gekk#6F6F"G"G"G 	* 	* 	** * *C-!!!!$$S!+0 % J JX - - -Xchhsmm,,-G G G??:.. G"jja00399;;AA#FFGHHJJJMMWMMMG")!	*" "%%&9&?&?@P&Q&QRRGw''' #3323333""s6   .A D9)B ?D9 1B41D93B44BD98D9c                     t           st          j        d          a t          d          }t           |t          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 %srb   )r   r   readlinkr"   r   r   r   )r2   debian_defaults     r
   rx   rx      s     ;;'9::!"344NZ0X0XYYY *,:; < < 	< &  ##r   c                 ,   t                       d }t          |           }t          d          }t          |          dk    r|d                             |          }g }|D ]}|                    |           	 |                    |                    t          dd                              }n	#  d}Y nxY w|	                                 |r|                    |           nt          d          |st          d          |r|S d	 |D             S )
NTr1   r7   r6   rb   r   z/No supported python3 versions in version stringzempty set of versionsc                     g | ]}d |z  S r   r:   rc   s     r
   r   z&requested_versions.<locals>.<listcomp>   s    +++1
Q+++r   )rx   r[   rF   r?   intersectionr   r   r   r   r   r   )rO   r2   r6   rQ   	supportedvlr,   r   s           r
   requested_versionsr      s*   H7##E"555I
5zzQ$11)<<33G7!3!3!3!3	ffRXX&6qrr&:;;<<GG	GGG
			 	IIgJKKK 20111 ,	++++++s   ;5B1 1B7c                     dd l }t                      fd|                     d          |                     d          z   D             }|                                 | rd |D             S |S )Nr   c                     g | ]B}t           j                            |          v #t           j                            |          CS r:   )r   r   basename)r   r_   r   s     r
   r   z&installed_versions.<locals>.<listcomp>   sN     5 5 57##A&&)33   ##333r   z/usr/bin/python3.[0-9]z/usr/bin/python3.[0-9][0-9]c                 "    g | ]}|d d         S ra   r:   rc   s     r
   r   z&installed_versions.<locals>.<listcomp>   s     (((!!""(((r   )globrF   r   )r2   r   r6   r   s      @r
   installed_versionsr      s    KKK"$$I5 5 5 5#;<<tyyIf?g?gg5 5 5H MMOOO ((x((((r   c                 f    t          d          } | d |D                       }d|z  }|r|S d|z   S )NTc              3   4   K   | ]}t          |          V  d S r%   r;   r   s     r
   r(   z+minmax_supported_version.<locals>.<genexpr>   s+      NNs%c**NNNNNNr   z%d.%dpython)rF   )minmaxr2   supported_versions_listr,   version_strs        r
   minmax_supported_versionr      sR    066fNN6MNNNNNGG#K &+%%r   c                       e Zd ZdS )ControlFileValueErrorN__name__
__module____qualname__r:   r   r
   r   r              Dr   r   c                       e Zd ZdS )MissingVersionValueErrorNr   r:   r   r
   r   r      r   r   r   c                 B   d}d}d}t          | d          5 }d |D             }ddd           n# 1 swxY w Y   |D ]}|dk    r|dk    r|dk    r nd}|                    d          rd}1|                    d|z             r|}L|                                                    d	          rC|dk    rt          d
          |                    dd          d                                         }|t          d          |dk    r|t          d          |S |S )zFread the debian/control file, extract the X-Python3-Version
    field.Nzutf-8)encodingc                 6    g | ]}|                                 S r:   r   )r   r   s     r
   r   z/extract_pyversion_attribute.<locals>.<listcomp>   s     666$666r   r   SourcezSource:z	Package: zx-python3-version:z1attribute X-Python3-Version not in Source sectionrt   r7   znot a control filez$no X-Python3-Version in control file)r   r   lowerr   r+   r   r   r   )fnpkgr,   sversionsectioncontrolfilelinesr   s           r
   extract_pyversion_attributer      s    GHG	b7	#	#	# 7{66+6667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 5 52::'T//hGG__Y'' 	5GG__[3.// 	5GGZZ\\$$%9:: 	5("" !TUUUzz#q))!,2244H#$8999
h*+QRRRNs   155c                  	   ddl m}  d}	  | |          }|                    ddddd	
           |                    ddddd
           |                    ddddd
           |                    ddddd
           |                    dddd
           |                    dddd
           |                    dddd dd!"           |                                \  }}t          j                            t          j        d                   }|j	        rvt          |          dk    rc	 t          t          |j                             d S # t          $ r2}t          d#|z  |           t          j        d$           Y d }~d S d }~ww xY w|j        rIt          |          dk    r6t          d%                    t%          |j                                       d S |j        rIt          |          dk    r6t          d%                    t)          |j                                       d S |j        r<t          |          dk    r)t          t-          t.          |j                             d S |j        r<t          |          dk    r)t          t-          t2          |j                             d S |j        rt          |          d$k    r{t          |          dk    rd&}n|d         }	 t          j                            |          r|}	 t9          |d'          }	t;          |	|j                  }
n# t<          $ r< t          j                             |d(|d)           t          j        d$           Y nZtB          $ r9 t          j                             d*|z             t%          |j                  }
Y nw xY wt;          ||j                  }
t          d%                    |
                     d S # t          $ rD}t          j                             |d+|d,           t          j        d$           Y d }~d S d }~ww xY wt          j                             d-|d%|d,           t          j        d$           d S ).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)Fr2   )r   r   r   r   z%s:r7   rs   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   r?   printrx   r2   r   exitr   r   rF   r   r   r   r   minr   maxr   isfiler   r   r   stderrwriter   )r   r   parseroptsargsprogrammsgr6   r   rO   vss              r
   mainr     s   %%%%%%IE6\&&&F
dK>)	  ; ; ; dMA)  = = = dMM *	  = = =
 dMK)  = = = 'H)  @ @ @ 'H)  @ @ @ dK=#L~  O O O ""$$JD$gsx{++G| *D		Q	/$"34455555 	 	 	%'/3'''HQKKKKKKKKK	 
 $CIINNchh)$*;<<==>>>>>	 "CIINNchh)$*;<<==>>>>>		  s4yyA~~&sD,=>>?????		 s4yyA~~&sD,=>>?????	 CIINNt99>>'HHAwH	w~~h'' E?9"hGGG+GT5FGGBB,      J$$(/&5 6 6 6HQKKKKK/ ? ? ?J$$ &H%,&- . . . ,D,=>>BBB	? ($2CDD#((2,, 	 	 	J777CCC8999HQKKKKKKKKK	 	
WWWeee<===sa   ,!E 
F'FF/!O: %L7 6O: 7AN>:O: <?N>;O: =N>>:O: :
Q9QQ__main__r%   )F)r   rH   r   r   rd   rk   environr   r+   ry   r   r"   r-   r[   rf   rl   rF   rx   r   r   r   r   r   r   r   r   r   r:   r   r
   <module>r      s   
			 				 



	 ' 'z~~&<bAAGGLL' ' '      (; ; ;( ( (V   % % % %# # # #B       ", , , ,6
 
 
 
& & & &	 	 	 	 	J 	 	 		 	 	 	 	z 	 	 	  ><I I IV zDFFFFF r   