B :��a8E�@s�ddlmZddlZddlZddlZddlZddlZddlmZm Z m Z ddl m Z ddl mZmZmZmZmZmZe�e�Zd��Ze�d�Zd Zd d �ZeZGd d �d e�ZdS)�)�BytesION�)� sysconfig�detect_encoding�ZipFile)�finder)� FileOperator�get_export_entry� convert_path�get_executable� get_platform�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()) cCsXd|krT|�d�rB|�dd�\}}d|krT|�d�sTd||f}n|�d�sTd|}|S)N� z /usr/bin/env r�"z%s "%s"z"%s")� startswith�split)� executable�envZ _executable�r�@/opt/alt/python37/lib/python3.7/site-packages/distlib/scripts.py�enquote_executable3s  rc@s�eZdZdZeZdZd*dd�Zdd�Ze j � d �rBd d �Z d d �Z dd�Zd+dd�Zdd�ZeZdd�Zdd�ZdZdd�Zd,dd�Zdd�Zed d!��Zejd"d!��Zejd#ks�ejd kr�ejd#kr�d$d%�Zd-d&d'�Z d.d(d)�Z!dS)/� ScriptMakerz_ A class to copy or create scripts from source scripts or callable specifications. NTFcCs�||_||_||_d|_d|_tjdkp:tjdko:tjdk|_t d�|_ |pRt |�|_ tjdkprtjdkortjdk|_ tj|_dS)NF�posix�java)�zX.Y�nt)� source_dir� target_dir� add_launchers�force�clobber�os�name�_name�set_mode�set�variantsr�_fileop�_is_nt�sys� version_info)�selfrrr�dry_runZfileoprrr�__init__Ns   zScriptMaker.__init__cCs@|�dd�r<|jr<tj�|�\}}|�dd�}tj�||�}|S)N�guiF�pythonZpythonw)�getr(r!�pathr�replace�join)r+r�optionsZdn�fnrrr�_get_alternate_executable_s  z%ScriptMaker._get_alternate_executablerc CsLy"t|��}|�d�dkSQRXWn$ttfk rFt�d|�dSXdS)zl Determine if the specified executable is a script (contains a #! line) �z#!NzFailed to open %sF)�open�read�OSError�IOError�logger�warning)r+r�fprrr� _is_shellgs   zScriptMaker._is_shellcCsD|�|�r*ddl}|jj�d�dkr<|Sn|���d�r<|Sd|S)Nrzos.nameZLinuxz jython.exez/usr/bin/env %s)r?r�langZSystemZ getProperty�lower�endswith)r+rrrrr�_fix_jython_executabless z"ScriptMaker._fix_jython_executablecCs�tjdkrd}n8t|�t|�d}tjdkr4d}nd}d|koF||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 rT��darwini�� s#!� s #!/bin/sh s '''exec' s "$0" "$@" s' ''')r!r"�lenr)�platform)r+r� post_interpZsimple_shebangZshebang_lengthZmax_shebang_length�resultrrr�_build_shebangs  zScriptMaker._build_shebang�cCs~d}|jr|j}d}n�t��s&t�}nxt�rLtj�t�d�dt� d��}nRtj�t� d�dt� d�t� d�f�}tj� |�s�tj�t� d�dt� d��}|r�|� ||�}t j �d �r�|�|�}|r�t|�}|�d �}t j d kr�d |kr�d |kr�|d7}|�||�}y|�d �Wn"tk �r8td|��YnX|d k�rzy|�|�Wn&tk �rxtd||f��YnX|S)NTF�scriptszpython%s�EXE�BINDIRz python%s%s�VERSIONrzutf-8Zcliz -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))rrZis_python_buildr r r!r1r3Zget_path�get_config_var�isfiler6r)rJrrCr�encoderM�decode�UnicodeDecodeError� ValueError)r+�encodingrKr4Zenquoter�shebangrrr� _get_shebang�sP        zScriptMaker._get_shebangcCs$|jt|j|j�d�d|jd�S)N�.r)�moduleZ import_name�func)�script_template�dict�prefix�suffixr)r+�entryrrr�_get_script_text�s zScriptMaker._get_script_textcCstj�|�}|j|S)N)r!r1�basename�manifest)r+Zexename�baserrr� get_manifest�s zScriptMaker.get_manifestc Cs�|jo |j}tj�d�}|�|�s*||7}|s8||}nZ|dkrL|�d�}n |�d�}t�} t| d��} | � d|�WdQRX| � �} ||| }�x`|D�]V} tj � |j | �} |�r|tj �| �\}}|�d�r�|} d| } y|j�| |�Wn�tk �rxt�d�d | }tj �|��r*t�|�t�| |�|j�| |�t�d �yt�|�Wntk �rrYnXYnXnl|j�r�| �d |��s�d | |f} tj �| ��r�|j�s�t�d | �q�|j�| |�|j�r�|j�| g�|�| �q�WdS)Nzutf-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 logicr\z%s.%szSkipping existing file %s)rr(r!�lineseprUrB� _get_launcherrr�writestr�getvaluer1r3r�splitextrr'Zwrite_binary_file� Exceptionr<r=�exists�remove�rename�debugr r$�set_executable_mode�append)r+�namesrZZ script_bytes� filenames�extZ use_launcherrlZlauncher�stream�zfZzip_datar"�outname�n�eZdfnamerrr� _write_script�sX               zScriptMaker._write_script�-cCsnt�}d|jkr|�|�d|jkr<|�d||jdf�d|jkrj|�d||j|jd|jdf�|S)Nr�Xz%s%srzX.Yz %s%s%s.%sr)r%r&�addr*�variant_separator)r+r"rLrrr�get_script_filenames$s     z ScriptMaker.get_script_filenamesc Cs�d}|r0|�dg�}|r0dd�|�}|�d�}|jd||d�}|�|��d�}|�|j�}|rr|�dd�rrd } nd } |�||||| �dS) NrNZinterpreter_argsz %srzutf-8)r4r.F�pywri)r0r3rUr[rdr�r"r�) r+rcryr4rK�argsrZ�scriptZ scriptnamesrzrrr� _make_script/s   zScriptMaker._make_scriptcCs�d}tj�|jt|��}tj�|jtj�|��}|jsT|j� ||�sTt � d|�dSyt |d�}Wn t k r�|jsz�d}YnFX|��}|s�t �d|�dSt�|�dd��}|r�d}|�d�p�d }|�s|r�|��|j�||�|jr�|j�|g�|�|�n�t �d ||j�|jj�s~t|j�\} } |�d �|�| |�} d |k�rVd } nd} tj�|�} |�| g| |��|| �|�r�|��dS)NFznot copying %s (up-to-date)�rbz%s is an empty file (skipping)s rHTrrNzcopying and adjusting %s -> %srspythonwr�ri) r!r1r3rr rrerr'�newerr<rur8r;r,�readliner=� FIRST_LINE_RE�matchr2�group�close� copy_filer$rvrw�infor�seekr[r�r9)r+r�ryZadjustr}�fZ first_liner�rKrY�linesrZrzr~rrr� _copy_script?sP         zScriptMaker._copy_scriptcCs|jjS)N)r'r,)r+rrrr,rszScriptMaker.dry_runcCs ||j_dS)N)r'r,)r+�valuerrrr,vsrcCstt�d�dkrd}nd}t�dkr&dnd}d|||f}t�d d �d }t|��|�}|snd ||f}t|��|jS) N�P�Z64Z32z win-arm64z-armrz %s%s%s.exer\rrz(Unable to find resource %s in package %s) �struct�calcsizer �__name__�rsplitr�findrX�bytes)r+�kind�bitsZplatform_suffixr"Zdistlib_package�resource�msgrrrrm~szScriptMaker._get_launchercCs6g}t|�}|dkr"|�||�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)r4)r r�r�)r+� specificationr4ryrcrrr�make�s zScriptMaker.makecCs(g}x|D]}|�|�||��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+Zspecificationsr4ryr�rrr� make_multiple�s zScriptMaker.make_multiple)TFN)rNN)N)N)N)"r�� __module__� __qualname__�__doc__�SCRIPT_TEMPLATEr_rr-r6r)rJrr?rCrMr[rd�_DEFAULT_MANIFESTrfrhr�r�r�r�r��propertyr,�setterr!r"r#rmr�r�rrrrrEs2     E4 3  r) �ior�loggingr!�rer�r)�compatrrrZ resourcesr�utilrr r r r r � getLoggerr�r<�stripr��compiler�r�rZ_enquote_executable�objectrrrrr�<module>s