§
    ã�2d§4  ã                   óØ   — d dl Z d dlZd dlZd dlmZmZ d dlmZ d dlm	Z	  ej
        dej        ¦  «        Z ej
        dej        ¦  «        Z e j        e¦  «        Z G d„ d¦  «        ZdS )	é    N)ÚjoinÚsplit)Úexecute)ÚVersionzÉ
    (?:\#!\s*){0,1}  # shebang prefix
    (?P<path>
        .*?/bin/.*?)?
    (?P<name>
        python|pypy)
    (?P<version>
        \d[\.\d]*)?
    (?P<debug>
        -dbg)?
    (?P<options>.*)
    a-  
    (?P<name>.*?)
    (?:\.
        (?P<stableabi>abi\d+)
     |(?:\.
        (?P<soabi>
            (?P<impl>cpython|pypy)
            -
            (?P<ver>\d{2})
            (?P<flags>[a-z]*?)
        )
        (?:
            -(?P<multiarch>[^/]*?)
        )?
    ))?
    (?P<debug>_d)?
    \.so$c                   ó¼   — e Zd ZdZdZdZdZdZdZi Z		 	 dd„Z
d„ Zd„ Zd	„ Zd
„ Zed„ ¦   «         Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„ZdS )ÚInterpreterNÚpythonFÚcpython© c                 ó  — t          ¦   «         }|d= |d= t          |t          ¦  «        r3|                     ¦   «         D ]}	||	         €t	          ||	¦  «        ||	<   Œny|rw|                     dd¦  «                             ¦   «         r|st          |¦  «        |d<   n:|                      |¦  «         	                    ¦   «         D ]\  }	}
||	         €|
||	<   Œ| 	                    ¦   «         D ]\  }	}
t          | |	|
¦  «         Œd S )NÚselfÚvalueú.Ú Úversion)ÚlocalsÚ
isinstancer   ÚkeysÚgetattrÚreplaceÚisdigitr   ÚparseÚitemsÚsetattr)r   r   ÚpathÚnamer   ÚdebugÚimplÚoptionsÚparamsÚkeyÚvals              ú+/usr/share/python3/debpython/interpreter.pyÚ__init__zInterpreter.__init__E   s$  € å‘”ˆØ�6ˆNØ�7ˆOå�e�[Ñ)Ô)ð 
	*Ø—{’{‘}”}ð 6ð 6�Ø˜#”;Ð&Ý")¨%°Ñ"5Ô"5�F˜3‘Køð6ð ð 	*Ø�}Š}˜S "Ñ%Ô%×-Ò-Ñ/Ô/ð *¸ð *Ý$+¨E¡N¤N��yÑ!Ð!à $§
¢
¨5Ñ 1Ô 1× 7Ò 7Ñ 9Ô 9ð *ð *‘H�C˜Ø˜c”{Ð*Ø&)˜˜s™øàŸš™œð 	$ð 	$‰HˆC�Ý�D˜#˜sÑ#Ô#Ð#Ð#ð	$ð 	$ó    c                 ó>  — |dk    rP|rN|                      d¦  «        rd| j        d<   n|                      d¦  «        r
d| j        d<   d|v r
d| j        d<   n|d	k    r|�t          |¦  «        }|d
v r!|€t          t          |¦  «        | j        |<   d S || j        |<   d S )Nr   r	   r
   r   Úpypyz-dbgTr   r   )r   r   r   r   )Ú
startswithÚ__dict__r   r   r   )r   r   r   s      r#   Ú__setattr__zInterpreter.__setattr__Z   sÅ   € Ø�6Š>ˆ>˜eˆ>Ø×Ò Ñ)Ô)ð /Ø(1�”˜fÑ%Ð%Ø×!Ò! &Ñ)Ô)ð /Ø(.�”˜fÑ%Ø˜ˆˆØ)-�”˜gÑ&øØ�YÒÐ 5Ð#4Ý˜E‘N”NˆEØÐ7Ð7Ð7¸E¸Må")­+°tÑ"<Ô"<ˆDŒM˜$ÑÐÐà"'ˆDŒM˜$ÑÐÐr%   c                 ó    — | j         pd}||                      | j        ¦  «        z  }| j        r |dd                     | j        ¦  «        z   z  }|S )Nr   ú )r   Ú_vstrr   r   r   )r   Úresults     r#   Ú__repr__zInterpreter.__repr__j   sQ   € Ø”�˜bˆØ�$—*’*˜Tœ\Ñ*Ô*Ñ*ˆØŒ<ð 	3Ø�c˜CŸHšH T¤\Ñ2Ô2Ñ2Ñ2ˆFØˆr%   c                 ó6   — |                       | j        ¦  «        S ©N)r-   r   )r   s    r#   Ú__str__zInterpreter.__str__q   s   € Ø�zŠz˜$œ,Ñ'Ô'Ð'r%   c                 óÊ   — | j         dk    r| j        S |rIt          |¦  «        | j        vr3| j        rd                     |¦  «        S | j        t          |¦  «        z   S | j        S )Nr'   zpython{}-dbg)r   r   Ústrr   Úformat©r   r   s     r#   r-   zInterpreter._vstrt   sj   € ØŒ9˜ÒÐà”9ÐØð 	,•s˜7‘|”|¨4¬9Ð4Ð4ØŒzð 6Ø%×,Ò,¨WÑ5Ô5Ð5Ø”9�s 7™|œ|Ñ+Ð+ØŒyÐr%   c                 óÆ   — t                                | ¦  «        }|si S |                     ¦   «         }d|v r*t          |d                              ¦   «         ¦  «        |d<   |S )a«  Return dict with parsed shebang

        >>> sorted(Interpreter.parse('pypy').items())
        [('debug', None), ('name', 'pypy'), ('options', ()), ('path', None), ('version', None)]
        >>> sorted(Interpreter.parse('/usr/bin/python3.3-dbg').items())
        [('debug', '-dbg'), ('name', 'python'), ('options', ()), ('path', '/usr/bin/'), ('version', '3.3')]
        >>> sorted(Interpreter.parse('#! /usr/bin/pypy --foo').items())
        [('debug', None), ('name', 'pypy'), ('options', ('--foo',)), ('path', '/usr/bin/'), ('version', None)]
        >>> sorted(Interpreter.parse('#! /usr/bin/python3.2').items())
        [('debug', None), ('name', 'python'), ('options', ()), ('path', '/usr/bin/'), ('version', '3.2')]
        >>> sorted(Interpreter.parse('/usr/bin/python3.2-dbg --foo --bar').items())
        [('debug', '-dbg'), ('name', 'python'), ('options', ('--foo', '--bar')), ('path', '/usr/bin/'), ('version', '3.2')]
        r   )Ú
SHEBANG_REÚsearchÚ	groupdictÚtupler   )Úshebangr.   s     r#   r   zInterpreter.parse~   sh   € õ  ×"Ò" 7Ñ+Ô+ˆØð 	ØˆIØ×!Ò!Ñ#Ô#ˆØ˜ÐÐå % f¨YÔ&7×&=Ò&=Ñ&?Ô&?Ñ @Ô @ˆF�9ÑØˆr%   c                 óÒ   — t          |p| j        ¦  «        }| j        dk    rd}n2|t          d¦  «        z  rd|z  }n|t          d¦  «        z  rd|z  }nd}|rd|z  }|rd	|›|›�}|S )
aß  Return path to site-packages directory.

        Note that returned path is not the final location of .py files

        >>> i = Interpreter('python')
        >>> i.sitedir(version='3.1')
        '/usr/lib/python3/dist-packages/'
        >>> i.sitedir(version='2.5')
        '/usr/lib/python2.5/site-packages/'
        >>> i.sitedir(version=Version('2.7'))
        '/usr/lib/python2.7/dist-packages/'
        >>> i.sitedir(version='3.1', gdb=True, package='python3-foo')
        'debian/python3-foo/usr/lib/debug/usr/lib/python3/dist-packages/'
        >>> i.sitedir(version=Version('3.2'))
        '/usr/lib/python3/dist-packages/'
        >>> Interpreter('pypy').sitedir(version='2.0')
        '/usr/lib/pypy/dist-packages/'
        r'   z/usr/lib/pypy/dist-packages/ú2.6z /usr/lib/python%s/site-packages/z3.0z /usr/lib/python%s/dist-packages/z/usr/lib/python3/dist-packages/z/usr/lib/debug%szdebian/)r   r   r   )r   ÚgdbÚpackager   r   s        r#   ÚsitedirzInterpreter.sitedir—   s£   € õ& ˜'Ð1 T¤\Ñ2Ô2ˆð Œ9˜ÒÐØ1ˆDˆDØ� ™œÑ&ð 	5Ø5¸Ñ?ˆDˆDØ� ™œÑ&ð 	5Ø5¸Ñ?ˆDˆDà4ˆDàð 	-Ø%¨Ñ,ˆDØð 	3ð 	3Ø$+ G¨T¨TÐ2ˆDàˆr%   c           	      ó8  — t          |p| j        ¦  «        }d| j        v rdnd}|t          d¦  «        k    r||z   S t          |¦  «        \  }}|                     d¦  «        s|dz  }t          |d|dd…         ›d	|                      |¦  «        ›d|›�¦  «        S )
a¦  Given path to a .py file, return path to its .pyc/.pyo file.

        This function is inspired by Python 3.2's imp.cache_from_source.

        :param fpath: path to file name
        :param version: Python version

        >>> i = Interpreter('python')
        >>> i.cache_file('foo.py', Version('3.1'))
        'foo.pyc'
        >>> i.cache_file('bar/foo.py', '3.2')
        'bar/__pycache__/foo.cpython-32.pyc'
        z-OÚoÚcú3.1z.pyÚ__pycache__Néýÿÿÿr   )r   r   r   r   Úendswithr   Ú	magic_tag)r   Úfpathr   Ú	last_charÚfdirÚfnames         r#   Ú
cache_filezInterpreter.cache_file½   s»   € õ ˜'Ð1 T¤\Ñ2Ô2ˆØ 4¤<Ð/Ð/�C�C°Sˆ	Ø•g˜e‘n”nÒ$Ð$Ø˜9Ñ$Ð$å˜E‘l”l‰ˆˆeØ�~Š~˜eÑ$Ô$ð 	Ø�U‰NˆEÝ�D˜-Ø˜3˜B˜3”Z�Z�Z §¢°Ñ!8Ô!8Ð!8Ð!8¸)¸)ð*Eñ Fô Fð 	Fr%   c                 óz  — t          |p| j        ¦  «        }|                      |¦  «        \  }}|                     dd¦  «        d         }|r2|d                     |¦  «        z  }|r|d                     |¦  «        z  }| j        r"| j        dk    r|t          d¦  «        z  r|dz  }d	                     |¦  «        S )
z5Return extension name with soname and multiarch tags.r   é   r   z.{}z-{}r
   Ú3Ú_dz{}.so)r   r   Ú_get_configr   r5   r   r   )r   r   r   ÚsoabiÚ	multiarchr.   s         r#   Úext_filezInterpreter.ext_fileÖ   sÆ   € å˜'Ð1 T¤\Ñ2Ô2ˆØ×+Ò+¨GÑ4Ô4ÑˆˆyØ—’˜C Ñ#Ô# AÔ&ˆØð 	2Ø�e—l’l 5Ñ)Ô)Ñ)ˆFØð 2Ø˜%Ÿ,š, yÑ1Ô1Ñ1�ØŒ:ð 	˜$œ) yÒ0Ð0Ø�w s™|œ|Ñ+ð 1à�d‰NˆFØ�~Š~˜fÑ%Ô%Ð%r%   c                 ó¶   — t          |p| j        ¦  «        }| j        dk    r|t          d¦  «        z  rdS |                      d|¦  «        }t	          |¦  «        S )zReturn magic number.r
   rQ   r   z"import imp; print(imp.get_magic()))r   r   r   Ú_executeÚeval)r   r   r.   s      r#   Úmagic_numberzInterpreter.magic_numberä   sX   € å˜'Ð1 T¤\Ñ2Ô2ˆØŒ9˜	Ò!Ð! gµ¸±´Ñ&=Ð!Ø�2Ø—’ÐCÀWÑMÔMˆÝ�F‰|Œ|Ðr%   c                 ó˜   — t          |p| j        ¦  «        }| j        dk    r|t          d¦  «        z  rdS |                      d|¦  «        S )z«Return Python magic tag (used in __pycache__ dir to tag files).

        >>> i = Interpreter('python')
        >>> i.magic_tag(version='3.2')
        'cpython-32'
        r
   ú3.2r   z import imp; print(imp.get_tag()))r   r   r   rX   r6   s     r#   rI   zInterpreter.magic_tagì   sO   € õ ˜'Ð1 T¤\Ñ2Ô2ˆØŒ9˜	Ò!Ð! gµ¸±´Ñ&?Ð!Ø�2Ø�}Š}Ð?ÀÑIÔIÐIr%   c                 óÀ   — t          |p| j        ¦  «        }	 |                      |¦  «        \  }}n-# t          $ r  t                               dd¬¦  «         Y dS w xY w|S )zReturn multiarch tag.zcannot get multiarchT©Úexc_infor   ©r   r   rS   Ú	ExceptionÚlogr   ©r   r   rT   rU   s       r#   rU   zInterpreter.multiarchø   sv   € å˜'Ð1 T¤\Ñ2Ô2ˆð	Ø#×/Ò/°Ñ8Ô8ÑˆE�9�9øÝð 	ð 	ð 	Ý�IŠIÐ,°tˆIÑ<Ô<Ð<à�2�2ð	øøøð Ðó   ˜1 ±&AÁAc                 ó¤   — t          |p| j        ¦  «        }| j        dk    r,|t          d¦  «        z	  rd                     |j        ¦  «        S d S d S )Nr
   r\   zabi{})r   r   r   r5   Úmajorr6   s     r#   Ú	stableabizInterpreter.stableabi  sU   € Ý˜'Ð1 T¤\Ñ2Ô2ˆàŒ9˜	Ò!Ð! gµ¸±´Ñ&?Ð!Ø—>’> '¤-Ñ0Ô0Ð0ð "Ð!Ð!Ð!r%   c                 óÀ   — t          |p| j        ¦  «        }	 |                      |¦  «        \  }}n-# t          $ r  t                               dd¬¦  «         Y dS w xY w|S )z›Return SOABI flag (used to in .so files).

        >>> i = Interpreter('python')
        >>> i.soabi(version=Version('3.3'))
        'cpython-33m'
        zcannot get soabiTr^   r   r`   rc   s       r#   rT   zInterpreter.soabi	  sw   € õ ˜'Ð1 T¤\Ñ2Ô2ˆð	Ø#×/Ò/°Ñ8Ô8ÑˆE�9�9øÝð 	ð 	ð 	Ý�IŠIÐ(°4ˆIÑ8Ô8Ð8à�2�2ð	øøøð ˆrd   c                 ó   — t          |p| j        ¦  «        }d|v r|                     dd¦  «        \  }}nd}t                               |¦  «        }|sdS |                     ¦   «         }|d         rdS t          | |¬¦  «        }|d         r3d                     |d         d	         |d         d         ¦  «        |_        |j        s|d
         sd|d         pdv rd|_        	 | 	                    ¦   «         \  }}n-# t          $ r  t                               dd¬¦  «         Y dS w xY w|d         }|j        dk    r)|j        dz	  r|                     d¦  «        r
|dd…         }|d         s|rFd                     ||d         p|¦  «        }|d         s|rd                     ||d         p|¦  «        }|dz  }||k    rdS t          ||¦  «        S )aˆ  Return extension file name if file can be renamed.

        >>> i = Interpreter('python')
        >>> i.check_extname('foo.so', version='3.3') # doctest: +ELLIPSIS
        'foo.cpython-33m-....so'
        >>> i.check_extname('foo.abi3.so', version='3.3')
        >>> i.check_extname('foo/bar/bazmodule.so', version='3.3') # doctest: +ELLIPSIS
        'foo/bar/baz.cpython-33m-....so'
        ú/rP   r   Nrg   )r   Úverz{}.{}r   r   ÚdÚflagsTzcannot get soabi/multiarchr^   r   r
   r\   ÚmoduleiúÿÿÿrT   rU   z{}-{}z.so)r   r   ÚrsplitÚ
EXTFILE_REr9   r:   r   r5   r   rS   ra   rb   r   rH   r   )	r   rM   r   rL   ÚinfoÚirT   rU   r.   s	            r#   Úcheck_extnamezInterpreter.check_extname  s  € õ ˜'Ð1 T¤\Ñ2Ô2ˆà�%ˆ<ˆ<ØŸ,š, s¨AÑ.Ô.‰KˆD�%�%àˆDå× Ò  Ñ'Ô'ˆØð 	ØˆFØ�~Š~ÑÔˆà�Ôð 	àˆFå˜ gÐ.Ñ.Ô.ˆØ�Œ;ð 	GØŸš t¨E¤{°1¤~°t¸E´{À1´~ÑFÔFˆAŒIØŒwð 	˜D œMð 	¨S°T¸'´]Ð5HÀbÐ-IÐ-IØˆAŒGð	Ø Ÿ}š}™œÑˆE�9�9øÝð 	ð 	ð 	Ý�IŠIÐ2¸TˆIÑBÔBÐBØˆFˆFð	øøøð �f”ˆØŒ6�YÒÐ 1¤9°Ñ#5Ð¸&¿/º/È(Ñ:SÔ:SÐØ˜C˜R˜C”[ˆFØ�Œ=ð 	P˜Eð 	PØ—^’^ F¨D°¬MÐ,B¸UÑCÔCˆFØ�KÔ ð P Ið PØ Ÿš¨°°[Ô0AÐ0NÀYÑOÔO�à�%‰ˆØ�FŠ?ˆ?ØˆFÝ�D˜&Ñ!Ô!Ð!s   Ã"C: Ã:&D$Ä#D$c                 ó<  — t          |p| j        ¦  «        }| j        dk    s | j        dk    r|dz	  r|dz  s|dz	  s|dk    rd}nd}|dz  }|                      ||¦  «                             d	¦  «        }	 t
          j        d
         |d<   n# t          $ r Y nw xY w|S )Nr'   r
   r>   rQ   rE   zimport sysconfig as s;z%from distutils import sysconfig as s;zOprint("__SEP__".join(i or "" for i in s.get_config_vars("SOABI", "MULTIARCH")))Ú__SEP__ÚDEB_HOST_MULTIARCHrP   )r   r   r   rX   r   ÚosÚenvironÚKeyError)r   r   ÚcmdÚ	conf_varss       r#   rS   zInterpreter._get_configK  sÜ   € Ý˜'Ð1 T¤\Ñ2Ô2ˆð Œ9˜ÒÐ $¤)¨yÒ"8Ð"8Ø˜5Ñ ð #9Ø%,°¡^ð #9à˜eÑ#ð #9à'.°#¢~ ~Ø*ˆCˆCà9ˆCØð Dñ 	Dˆà—M’M # wÑ/Ô/×5Ò5°iÑ@Ô@ˆ	ð	Ýœ:Ð&:Ô;ˆI�a‰LˆLøÝð 	ð 	ð 	ØˆDð	øøøàÐs   Á6B Â
BÂBTc                 óú  — t          |p| j        ¦  «        }|                      |¦  «        d|f}|r || j        j        v r| j        j        |         S t          |¦  «        }|d         dk    rIt                               |d         ¦  «         t          d 	                    ||d         ¦  «        ¦  «        ‚|d          
                    ¦   «         }t          |¦  «        dk    r|d         }|r|| j        j        |<   |S )Nz-cÚ
returncoder   Ústderrz{} failed with status code {}ÚstdoutrP   )r   r   r-   Ú	__class__Ú_cacher   rb   r   ra   r5   Ú
splitlinesÚlen)r   Úcommandr   ÚcacheÚoutputr.   s         r#   rX   zInterpreter._execute^  sú   € Ý˜'Ð1 T¤\Ñ2Ô2ˆØ—:’:˜gÑ&Ô&¨¨gÐ6ˆØð 	2�W ¤Ô 5Ð5Ð5Ø”>Ô(¨Ô1Ð1å˜Ñ!Ô!ˆØ�,Ô 1Ò$Ð$Ý�IŠI�f˜XÔ&Ñ'Ô'Ð'ÝÐ;×BÒBÀ7ÈFÐS_ÔL`ÑaÔaÑbÔbÐbà˜Ô!×,Ò,Ñ.Ô.ˆåˆv‰;Œ;˜!ÒÐØ˜A”YˆFàð 	4Ø-3ˆDŒNÔ! 'Ñ*àˆr%   )NNNNNNN)FNNr1   )NT)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r�   r$   r*   r/   r2   r-   Ústaticmethodr   rA   rN   rV   rZ   rI   rU   rg   rT   rs   rS   rX   r   r%   r#   r   r   <   sŽ  € € € € € Ø€DØ€DØ€GØ€EØ€DØ€GØ€FàAEØ04ð$ð $ð $ð $ð*(ð (ð (ð ð ð ð(ð (ð (ðð ð ð ðð ñ „\ðð0$ð $ð $ð $ðLFð Fð Fð Fð2&ð &ð &ð &ðð ð ð ð
Jð 
Jð 
Jð 
Jð	ð 	ð 	ð 	ð1ð 1ð 1ð 1ðð ð ð ð"/"ð /"ð /"ð /"ðbð ð ð ð&ð ð ð ð ð r%   r   )Úloggingrw   ÚreÚos.pathr   r   Ú	debpythonr   Údebpython.versionr   ÚcompileÚVERBOSEr8   rp   Ú	getLoggerr‡   rb   r   r   r%   r#   ú<module>r“      sî   ðð* €€€Ø 	€	€	€	Ø 	€	€	€	Ø Ð Ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %àˆRŒZð ð 
Œñô €
ð ˆRŒZð ð  Œjñ!ô €
ð" €gÔ˜Ñ!Ô!€ðuð uð uð uð uñ uô uð uð uð ur%   