3
W>p_C                 @   s   d dl mZ d dlZd dlZd dlZd dlZd dlZddlmZm	Z	m
Z
 ddlmZ ddlmZmZmZmZmZ ejeZdj ZejdZd	Zd
d ZeZG dd deZdS )    )BytesION   )	sysconfigdetect_encodingZipFile)finder)FileOperatorget_export_entryconvert_pathget_executablein_venva  
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
 <assemblyIdentity version="1.0.0.0"
 processorArchitecture="X86"
 name="%s"
 type="win32"/>

 <!-- Identify the application security requirements. -->
 <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
 <security>
 <requestedPrivileges>
 <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
 </requestedPrivileges>
 </security>
 </trustInfo>
</assembly>s   ^#!.*pythonw?[0-9.]*([ 	].*)?$z# -*- coding: utf-8 -*-
import re
import sys
from %(module)s import %(import_name)s
if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
    sys.exit(%(func)s())
c             C   sZ   d| krV| j drD| jdd\}}d|krV|j d rVd||f } n| j dsVd|  } | S )N z/usr/bin/env r   "z%s "%s"z"%s")
startswithsplit)
executableenv_executable r   /home/aldo/Documentos/tesis/tesis/device auto/pruebas pulsar/pruebaclonado/envClonado/lib/python3.6/site-packages/distlib/scripts.pyenquote_executable3   s    

r   c               @   s   e Zd ZdZeZdZd'ddZdd Ze	j
jd	rBd
d Zdd Zdd Zd(ddZdd ZeZdd Zdd Zd)ddZdd Zedd Zejdd Zejd ksejd	krejd krd!d" Zd*d#d$Zd+d%d&ZdS ),ScriptMakerz_
    A class to copy or create scripts from source scripts or callable
    specifications.
    NTFc             C   s   || _ || _|| _d| _d| _tjdkp:tjdko:tjdk| _t	d| _
|pRt|| _tjdkprtjdkortjdk| _tj| _d S )NFposixjava X.Ynt)r   r   )
source_dir
target_diradd_launchersforceclobberosname_nameset_modesetvariantsr   _fileop_is_ntsysversion_info)selfr   r   r   dry_runfileopr   r   r   __init__N   s    

zScriptMaker.__init__c             C   s@   |j ddr<| jr<tjj|\}}|jdd}tjj||}|S )NguiFpythonpythonw)getr)   r"   pathr   replacejoin)r,   r   optionsdnfnr   r   r   _get_alternate_executable_   s
    z%ScriptMaker._get_alternate_executabler   c             C   sL   y"t |}|jddkS Q R X W n$ ttfk
rF   tjd| dS X dS )zl
            Determine if the specified executable is a script
            (contains a #! line)
               z#!NzFailed to open %sF)openreadOSErrorIOErrorloggerwarning)r,   r   fpr   r   r   	_is_shellg   s    
zScriptMaker._is_shellc             C   sD   | j |r*dd l}|jjjddkr<|S n|j jdr<|S d| S )Nr   zos.nameLinuxz
jython.exez/usr/bin/env %s)rC   r   langSystemgetPropertylowerendswith)r,   r   r   r   r   r   _fix_jython_executables   s    
z"ScriptMaker._fix_jython_executablec             C   s   t jdkrd}n8t|t| d }tjdkr4d}nd}d|koF||k}|r^d| | d	 }n d
}|d| | d 7 }|d7 }|S )a  
        Build a shebang line. In the simple case (on Windows, or a shebang line
        which is not too long or contains spaces) use a simple formulation for
        the shebang. Otherwise, use /bin/sh as the executable, with a contrived
        shebang which allows the script to run either under Python or sh, using
        suitable quoting. Thanks to Harald Nordgren for his input.

        See also: http://www.in-ulm.de/~mascheck/various/shebang/#length
                  https://hg.mozilla.org/mozilla-central/file/tip/mach
        r   T   darwini          s   #!   
s
   #!/bin/sh
s	   '''exec' s    "$0" "$@"
s   ' ''')r"   r#   lenr*   platform)r,   r   post_interpsimple_shebangshebang_lengthmax_shebang_lengthresultr   r   r   _build_shebang   s    

zScriptMaker._build_shebang    c             C   sT  d}| j r| j }d}n^tj s&t }nNt rLtjjtjddtj	d }n(tjjtj	ddtj	dtj	df }|r| j
||}tjjd	r| j|}|rt|}|jd
}tjdkrd|krd|kr|d7 }| j||}y|jd
 W n" tk
r   td| Y nX |d
krPy|j| W n& tk
rN   td||f Y nX |S )NTFscriptszpython%sEXEBINDIRz
python%s%sVERSIONr   zutf-8cliz	-X:Framesz-X:FullFramess
    -X:Framesz,The shebang (%r) is not decodable from utf-8z?The shebang (%r) is not decodable from the script encoding (%r))r   r   is_python_buildr   r   r"   r4   r6   get_pathget_config_varr:   r*   rQ   r   rJ   r   encoderW   decodeUnicodeDecodeError
ValueError)r,   encodingrR   r7   enquoter   shebangr   r   r   _get_shebang   sJ    



zScriptMaker._get_shebangc             C   s$   | j t|j|jjdd |jd S )N.r   )moduleimport_namefunc)script_templatedictprefixsuffixr   )r,   entryr   r   r   _get_script_text   s    
zScriptMaker._get_script_textc             C   s   t jj|}| j| S )N)r"   r4   basenamemanifest)r,   exenamebaser   r   r   get_manifest   s    zScriptMaker.get_manifestc             C   s  | j o
| j}tjjd}|j|s*||7 }|s8|| }nZ|dkrL| jd}n
| jd}t }	t|	d}
|
j	d| W d Q R X |	j
 }|| | }xd|D ]Z}tjj| j|}|r|tjj|\}}|jdr|}d| }y| jj|| W n tk
rx   tjd d	| }tjj|r*tj| tj|| | jj|| tjd
 ytj| W n tk
rr   Y nX Y nX np| jr|jd|  rd||f }tjj|r| j rtjd| q| jj|| | jr| jj|g |j| qW d S )Nzutf-8pytwz__main__.pyz.pyz%s.exez:Failed to write executable - trying to use .deleteme logicz%s.deletemez0Able to replace executable using .deleteme logicri   z%s.%szSkipping existing file %s)r   r)   r"   linesepra   rI   _get_launcherr   r   writestrgetvaluer4   r6   r   splitextr   r(   write_binary_file	Exceptionr@   rA   existsremoverenamedebugr!   r%   set_executable_modeappend)r,   namesrg   script_bytes	filenamesextuse_launcherr{   launcherstreamzfzip_datar#   outnamenedfnamer   r   r   _write_script   sX    






zScriptMaker._write_scriptc             C   s   d}|r0|j dg }|r0ddj| }|jd}| jd||d}| j|jd}|j}t }	d| jkrp|	j| d| jkr|	jd	|| j	d
 f  d| jkr|	jd|| j	d
 | j	d f  |r|j ddrd}
nd}
| j
|	||||
 d S )NrX   interpreter_argsz %sr   zutf-8)r7   r   Xz%s%sr   zX.Yz%s-%s.%sr   r0   Fpywrx   )r3   r6   ra   rh   rr   r#   r&   r'   addr+   r   )r,   rq   r   r7   rR   argsrg   scriptr#   scriptnamesr   r   r   r   _make_script  s*    




zScriptMaker._make_scriptc             C   s  d}t jj| jt|}t jj| jt jj|}| j rX| jj	|| rXt
jd| d S yt|d}W n  tk
r   | js~ d }Y nLX |j }|st
jd| j | d S tj|jdd}|rd}|jdpd	}|s|r|j  | jj|| | jr| jj|g |j| nt
jd
|| j | jjst|j\}	}
|jd | j|	|}d|krbd}nd}t jj|}| j|g||j  || |r|j  d S )NFznot copying %s (up-to-date)rbz"%s: %s is an empty file (skipping)s   
rO   Tr   rX   zcopying and adjusting %s -> %sr   s   pythonwr   rx   )!r"   r4   r6   r   r
   r   rs   r    r(   newerr@   r   r<   r?   r-   readlinerA   get_command_nameFIRST_LINE_REmatchr5   groupclose	copy_filer%   r   r   infor   seekrh   r   r=   )r,   r   r   adjustr   f
first_liner   rR   re   linesrg   r   r   r   r   r   _copy_script5  sR    



zScriptMaker._copy_scriptc             C   s   | j jS )N)r(   r-   )r,   r   r   r   r-   i  s    zScriptMaker.dry_runc             C   s   || j _d S )N)r(   r-   )r,   valuer   r   r   r-   m  s    r   c             C   s`   t jddkrd}nd}d||f }tjddd }t|j|}|sZd	||f }t||jS )
NP   Z64Z32z%s%s.exeri   r   r   z(Unable to find resource %s in package %s)structcalcsize__name__rsplitr   findrd   bytes)r,   kindbitsr#   Zdistlib_packageresourcemsgr   r   r   r|   u  s    zScriptMaker._get_launcherc             C   s6   g }t |}|dkr"| j|| n| j|||d |S )a  
        Make a script.

        :param specification: The specification, which is either a valid export
                              entry specification (to make a script from a
                              callable) or a filename (to make a script by
                              copying from a source location).
        :param options: A dictionary of options controlling script generation.
        :return: A list of all absolute pathnames written to.
        N)r7   )r	   r   r   )r,   specificationr7   r   rq   r   r   r   make  s    zScriptMaker.makec             C   s(   g }x|D ]}|j | j|| q
W |S )z
        Take a list of specifications and make scripts from them,
        :param specifications: A list of specifications.
        :return: A list of all absolute pathnames written to,
        )extendr   )r,   specificationsr7   r   r   r   r   r   make_multiple  s    
zScriptMaker.make_multiple)TFN)rX   N)N)N)N) r   
__module____qualname____doc__SCRIPT_TEMPLATErm   r   r/   r:   r*   rQ   r   rC   rJ   rW   rh   rr   _DEFAULT_MANIFESTrt   rw   r   r   r   propertyr-   setterr"   r#   r$   r|   r   r   r   r   r   r   r   E   s.    

@4
4
r   )ior   loggingr"   rer   r*   compatr   r   r   	resourcesr   utilr   r	   r
   r   r   	getLoggerr   r@   stripr   compiler   r   r   _enquote_executableobjectr   r   r   r   r   <module>   s   

