a qegH@sddlmZddlZddlZddlZddlZddlZddlZddlm Z ddl m Z m Z m Z ddlmZddlmZmZmZmZmZmZeeZdZed Zd Zejd ksejd krej d kre!d ddZ"ddee"#dDZ$ddZ%e%Z&Gddde'Z(dS))BytesION)ZipInfo) sysconfigdetect_encodingZipFile)finder) FileOperatorget_export_entry convert_pathget_executable get_platformin_venva 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()) ntjava.cCs"i|]}|jdr|j|jqS)z.exe)nameendswithbytes).0rr9/usr/local/lib/python3.9/site-packages/distlib/scripts.py @s rcCsXd|vrT|drB|dd\}}d|vrT|dsTd||f}n|dsTd|}|S)N z /usr/bin/env r"z%s "%s"z"%s") startswithsplit) executableenv _executablerrrenquote_executableGs  r"c@seZdZdZeZdZd*ddZddZe j d rBd d Z d d Z ddZd+ddZddZeZddZddZdZddZd,ddZddZed d!Zejd"d!Zejd#ksejd krejd#krd$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)NFposixr)rX.Yr) source_dir target_dir add_launchersforceclobberosr_nameset_modesetvariantsr _fileop_is_ntsys version_info)selfr&r'r(dry_runfileoprrr__init__ds   zScriptMaker.__init__cCs@|ddr<|jrget_pathget_config_varrrBr2rZrrQr"encoder`decodeUnicodeDecodeError ValueError)r4encodingr[r?enquotershebangrrr _get_shebangsP          zScriptMaker._get_shebangcCs$|jt|j|jdd|jdS)Nrr)module import_namefunc)script_templatedictprefixsuffixr)r4entryrrr_get_script_textszScriptMaker._get_script_textcCstj|}|j|SN)r+r<basenamemanifest)r4exenamebaserrr get_manifests zScriptMaker.get_manifestc Cs(|jo |j}|s||}n|dkr.|d}n |d}t}t|d\} tjd} | rt t | dd} t d| d} | | |n | d|Wdn1s0Y| } ||| }|D]T}tj|j|}|rtj|\}}|dr|}d |}z|j||Wntytd d |}tj|r\t|t|||j||td zt|WntyYn0Yn0nl|jr|d |sd||f}tj|r|jstd|q|j|||jr|j|g| |qdS)NpytwSOURCE_DATE_EPOCHz __main__.py)filename date_timez.pyz%s.exez:Failed to write executable - trying to use .deleteme logicz %s.deletemez0Able to replace executable using .deleteme logicrz%s.%szSkipping existing file %s)!r(r1 _get_launcherrrr+environr;timegmtimeintrwritestrgetvaluer<r>r'splitextrr0write_binary_file ExceptionrHrIexistsremoverenamedebugrr*r-set_executable_modeappend)r4namesrq script_bytes filenamesext use_launcherlauncherstreamzfsource_date_epochrzinfozip_dataroutnamenedfnamerrr _write_scripts\       *         zScriptMaker._write_script-cCsnt}d|jvr||d|jvr<|d||jdfd|jvrj|d||j|jd|jdf|S)NrXz%s%srr%z %s%s%s.%sr)r.r/addr3variant_separator)r4rr_rrrget_script_filenames<s    $z ScriptMaker.get_script_filenamesc Csd}|r0|dg}|r0dd|}|d}|jd||d}||d}||j}|rr|ddrrd } nd } |||||| dS) Nrainterpreter_argsz %srrfr?r8Fpywr)r;r>rkrrr{rrr) r4rzrr?r[argsrqscript scriptnamesrrrr _make_scriptFs   zScriptMaker._make_scriptcCsd}tj|jt|}tj|jtj|}|jsT|j ||sTt d|dSzt |d}Wnt y|jsxd}YnF0|}|st d|dSt|dd}|rd}|dpd }|s|r||j|||jr|j|g||nt d ||j|jjs|t|j\} } |d || |} d |vrTd } nd} tj|} || g| ||| |r|dS)NFznot copying %s (up-to-date)rbz%s is an empty file (skipping)s rWTrrazcopying and adjusting %s -> %srspythonwrr) r+r<r>r&r r'r}r)r0newerrHrrDrGr5readlinerI FIRST_LINE_REmatchr=groupclose copy_filer-rrinforseekrrrrE)r4rradjustrf first_linerr[rolinesrqrrrrr _copy_scriptVsN          zScriptMaker._copy_scriptcCs|jjSr|r0r5)r4rrrr5szScriptMaker.dry_runcCs ||j_dSr|r)r4valuerrrr5srcCs\tddkrd}nd}tdkr&dnd}d|||f}|tvrTd |tf}t|t|S) NPZ64Z32z win-arm64z-armrz %s%s%s.exez(Unable to find resource %s in package %s)structcalcsizer WRAPPERSDISTLIB_PACKAGErn)r4kindbitsZplatform_suffixrmsgrrrrszScriptMaker._get_launchercCs6g}t|}|dur"|||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. Nr)r rr)r4 specificationr?rrzrrrmakes zScriptMaker.makecCs$g}|D]}||||q|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)r4specificationsr?rrrrr make_multipleszScriptMaker.make_multiple)TFN)raN)N)N)N)"__name__ __module__ __qualname____doc__SCRIPT_TEMPLATErvrr7rBr2rZrrKrQr`rrr{_DEFAULT_MANIFESTr~rrrrrrpropertyr5setterr+rr,rrrrrrrr#[s4    $ B7 2   r#))iorloggingr+rerr2rzipfilercompatrrr resourcesrutilr r r r r r getLoggerrrHstriprcompilerrrr,rsplitriteratorrr"_enquote_executableobjectr#rrrrs,