Ë Šã\7[J /ãó—ddlmZddlZddlZddlZddlZddlZddlZddlm Z ddl m Z m Z m Z ddlmZddlmZmZmZmZmZmZej.e«Zdj5«Zej8d «Zd Zd „ZeZ Gd „d e!«Z"y)é)ÚBytesION)ÚZipInfoé)Ú sysconfigÚdetect_encodingÚZipFile)Úfinder)Ú FileOperatorÚget_export_entryÚ convert_pathÚget_executableÚ get_platformÚin_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()) cóÄ—d|vr[|jd«r4|jdd«\}}d|vr|jd«s|›d|›d�}|S|jd«sd|z}|S)NÚ z /usr/bin/env rÚ"z "z"%s")Ú startswithÚsplit)Ú executableÚenvÚ _executables ú4/usr/lib/python3.12/site-packages/distlib/scripts.pyÚenquote_executabler5sx€Ø ˆjÑð × Ñ  Ô 1Ø)×/Ñ/°°QÓ7Ñ ˆC�Ø�kÑ!¨+×*@Ñ*@ÀÔ*EÚ*-ª{Ð;� ð Ðð×(Ñ(¨Ô-Ø# jÑ0� Ø ÐócóN—eZdZdZeZdZ dd„Zd„Ze jjd«rd„Z d„Z d„Zdd „Zd „ZeZd „Zd „Zd Zd„Zdd„Zd„Zed„«Zej6d„«Zej:dk(sej:dk(rej<dk(rd„Zdd„Z dd„Z!y)Ú ScriptMakerz_ A class to copy or create scripts from source scripts or callable specifications. NcóÄ—||_||_||_d|_d|_t j dk(xs(t j dk(xrt jdk(|_td«|_ |xs t|«|_ t j dk(xs(t j dk(xrt jdk(|_ tj|_y)NFÚposixÚjava)ÚúX.YÚnt)Ú 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Úfileops rÚ__init__zScriptMaker.__init__Rs½€ð %ˆŒØ$ˆŒØ*ˆÔ؈Œ ؈Œ 䟙 GÑ+òJ´·±¸FÑ1Bò2IÜ57·X±XÀÑ5Hð Œ ä˜KÓ(ˆŒ ØÒ6¤¨gÓ!6ˆŒ ä—g‘g ‘oò@¬"¯'©'°VÑ*;ò+?Ü.0¯h©h¸$Ñ.>ð Œ ä×,Ñ,ˆÕrcóê—|jdd«r`|jrTtjj |«\}}|j dd«}tjj ||«}|S)NÚguiFÚpythonÚpythonw)Úgetr/r(ÚpathrÚreplaceÚjoin)r2rÚoptionsÚdnÚfns rÚ_get_alternate_executablez%ScriptMaker._get_alternate_executablegsV€Ø �;‰;�u˜eÔ $¨¯ªÜ—W‘W—]‘] :Ó.‰FˆB�Ø—‘˜H iÓ0ˆBÜŸ™Ÿ™ b¨"Ó-ˆJØÐrrcóÄ— t|«5}|jd«dk(cddd«S#1swYyxYw#ttf$rtj d|«YywxYw)zl Determine if the specified executable is a script (contains a #! line) éz#!NzFailed to open %sF)ÚopenÚreadÚOSErrorÚIOErrorÚloggerÚwarning)r2rÚfps rÚ _is_shellzScriptMaker._is_shellpsR€ð  ܘ*Ô%¨ØŸ7™7 1›:¨Ñ-÷&×%Ò%ûäœWÐ%ò Ü—‘Ð2°JÔ?Ùð ús#‚ 7�+¡ 7«4°7´7·%AÁAcóÖ—|j|«r3ddl}|jjj d«dk(r|Sd|zS|j «j d«r|Sd|zS)Nrzos.nameÚLinuxz jython.exez/usr/bin/env %s)rKrÚlangÚSystemÚ getPropertyÚlowerÚendswith)r2rrs rÚ_fix_jython_executablez"ScriptMaker._fix_jython_executable|sk€Ø�~‰~˜jÔ)ãà—9‘9×#Ñ#×/Ñ/° Ó:¸gÒEØ%Ð%ð% zÑ1Ð 1ð×!Ñ!Ó#×,Ñ,¨\Ô:à!Ð!Ø$ zÑ1Ð 1rcóô—tjdk7rd}n=t|«t|«zdz}tjdk(rd}nd}d|vxr||k}|r d|z|zd z}|Sd }|d |z|zd zz }|d z }|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)Úlenr0Úplatform)r2rÚ post_interpÚsimple_shebangÚshebang_lengthÚmax_shebang_lengthÚresults rÚ_build_shebangzScriptMaker._build_shebangˆs²€ô �7‰7�gÒ Ø!‰Nô! ›_¬s°;Ó/?Ñ?À!ÑCˆNÜ�|‰|˜xÒ'Ø%(Ñ"à%(Ð"Ø#¨:Ð5òIØ#1Ð5GÑ#Gð ñ ؘZÑ'¨+Ñ5¸Ñ=ˆFð ˆ ð$ˆFØ �l ZÑ/°+Ñ=ÀÑOÑ OˆFØ �hÑ ˆF؈ rcó’—d}|jr|j}d}�n/tj«s t«}�nt «rJt j jtjd«dtjd«z«}n»t jdk(rJt j jtjd«dtjd«z«}n^t j jtjd«dtjd «›tjd«›�«}|r|j||«}tjjd «r|j|«}|r t!|«}|j#d «}tjd k(r d |vr d|vr|dz }|j%||«} |j'd «|d k7r |j'|«|S|S#t($rt+d|z«‚wxYw#t($rt+d|›d|›d�«‚wxYw)NTFÚscriptszpython%sÚEXEr"ÚBINDIRr8ÚVERSIONrúutf-8Úcliz -X:Framesz -X:FullFramess -X:Framesz,The shebang (%r) is not decodable from utf-8z The shebang (z-) is not decodable from the script encoding (Ú))rrÚis_python_buildr rr(r;r=Úget_pathÚget_config_varr)rAr0r[rrSrÚencoderaÚdecodeÚUnicodeDecodeErrorÚ ValueError)r2Úencodingr\r>ÚenquoterÚshebangs rÚ _get_shebangzScriptMaker._get_shebang§s€ØˆØ �?Š?ØŸ™ˆJØŠGÜ×*Ñ*Ô,Ü'Ó)ŠJÜ ŒYÜŸ™Ÿ™Ü×"Ñ" 9Ó-ØœY×5Ñ5°eÓ<Ñ<ó>‰Jô�w‰w˜$Šô ŸW™WŸ\™\Ü×,Ñ,¨XÓ6ؤ)×":Ñ":¸5Ó"AÑBóD‘ ô ŸW™WŸ\™\Ü×,Ñ,¨XÔ6Ü$-×$<Ñ$<¸YÔ$GÜ$-×$<Ñ$<¸UÔ$CðEóF� ñ Ø×7Ñ7¸ ÀGÓLˆJä �<‰<× "Ñ " 6Ô *Ø×4Ñ4°ZÓ@ˆJñ Ü+¨JÓ7ˆJð ×&Ñ& wÓ/ˆ ä �L‰L˜EÒ ! k¸Ñ&DØ#¨;Ñ6Ø ˜=Ñ (ˆKØ×%Ñ% j°+Ó>ˆð  &Ø �N‰N˜7Ô #ð �wÒ ð 6Ø—‘˜xÔ(𠈈wˆøô"ò &ÜÐKØ$ñ%ó&ð &ð &ûô&ò 6Ý â")ª8ð"5ó6ð6ð 6úsÇ#HÇ:H*ÈH'È*Icó˜—|jt|j|jj d«d|j¬«zS)NÚ.r)ÚmoduleÚ import_nameÚfunc)Úscript_templateÚdictÚprefixÚsuffixr)r2Úentrys rÚ_get_script_textzScriptMaker._get_script_textïsA€Ø×#Ñ#¤dØ—<‘<ØŸ ™ ×*Ñ*¨3Ó/°Ñ2Ø—‘ô'ñð rcó^—tjj|«}|j|zS©N)r(r;ÚbasenameÚmanifest)r2ÚexenameÚbases rÚ get_manifestzScriptMaker.get_manifest÷s%€Ü�w‰w×Ñ Ó(ˆØ�}‰}˜tÑ#Ð#rcóœ—|jxr |j}tjj d«}|j |«s||z }|s||z}nÓ|dk(r|j d«}n|j d«}t«} t| d«5} tjjd«} | rAtjt| ««dd} td| ¬«} | j| |«n| jd|«ddd«| j!«}||z|z}|D�]E}tj"j%|j&|«}|rXtj"j)|«\}}|j+d «r|}d |z} |j,j/||«n­|jr|j d|z«s|›d|›�}tj"j7|«r#|j>st2j5d|«Œñ|j,j/||«|j@r|j,jC|g«|jE|«�ŒHy#1swY�ŒnxYw#t0$r¾t2j5d «d |z}tj"j7|«rtj8|«tj:||«|j,j/||«t2j=d « tj8|«n#t0$rYnwxYwYŒèwxYw)NrgÚpyÚtÚwÚSOURCE_DATE_EPOCHéz __main__.py)ÚfilenameÚ date_timez.pyz%s.exez:Failed to write executable - trying to use .deleteme logicz %s.deletemez0Able to replace executable using .deleteme logicrvzSkipping existing file %s)#r%r/r(ÚlineseprmrRÚ _get_launcherrrÚenvironr:ÚtimeÚgmtimeÚintrÚwritestrÚgetvaluer;r=r$Úsplitextrr.Úwrite_binary_fileÚ ExceptionrHrIÚexistsÚremoveÚrenameÚdebugr'r+Úset_executable_modeÚappend)r2ÚnamesrsÚ script_bytesÚ filenamesÚextÚ use_launcherr�ÚlauncherÚstreamÚzfÚsource_date_epochrŽÚzinfoÚzip_datar)ÚoutnameÚnÚeÚdfnames rÚ _write_scriptzScriptMaker._write_scriptûs¬€Ø×)Ñ)Ò9¨d¯k©kˆ Ü—*‘*×#Ñ# GÓ,ˆØ×Ñ Ô(Ø �wÑ ˆGÙØ" \Ñ1‰Là�dŠ{Ø×-Ñ-¨cÓ2‘à×-Ñ-¨cÓ2�Ü“YˆFܘ Ô%¨Ü$&§J¡J§N¡NÐ3FÓ$GÐ!Ù$Ü $§ ¡ ¬CÐ0AÓ,BÓ CÀBÀQÐ G�IÜ#¨]Ø.7ô9�Eà—K‘K  |Õ4à—K‘K  ¨|Ô<÷&ð—‘Ó(ˆHØ# gÑ-°Ñ8ˆL܈DÜ—g‘g—l‘l 4§?¡?°DÓ9ˆGÙÜ—w‘w×'Ñ'¨Ó0‘��1Ø—<‘< Ô&Ø�GØ" WÑ,�ðØ—L‘L×2Ñ2°7¸LÕIð"—;’; w×'7Ñ'7ؘc™ ô(#â)0±#Ð6�GÜ—7‘7—>‘> 'Ô*°4·<²<Ü—N‘NÐ#>ÀÔHØØ— ‘ ×.Ñ.¨w¸ ÔEØ—=’=Ø—L‘L×4Ñ4°g°YÔ?Ø × Ñ ˜WÖ %ñE÷&Ñ%ûô(!òä—N‘Nð$9ô:à*¨WÑ4�FÜ—w‘w—~‘~ fÔ-ÜŸ ™  &Ô)Ü—I‘I˜g vÔ.Ø—L‘L×2Ñ2°7¸LÔIÜ—L‘Lð"3ô4ðÜŸ ™  &Õ)øÜ$òÙðüðúsDÂA5I7ÆJÉ7JÊBM Ì#L9Ì8M Ì9 MÍM ÍMÍM Í M Ú-cóP—t«}d|jvr|j|«d|jvr"|j|›|jd›�«d|jvr>|j|›|j›|jd›d|jd›�«|S)Nr ÚXrr!rvr)r,r-Úaddr1Úvariant_separator)r2r)r`s rÚget_script_filenamesz ScriptMaker.get_script_filenames9s“€Ü“ˆØ �—‘Ñ Ø �J‰J�tÔ Ø �$—-‘-Ñ Ø �J‰J¡ t×'8Ñ'8¸Ò';Ð<Ô =Ø �D—M‘MÑ !Ø �J‰JÙ˜d×4Ò4°d×6GÑ6GÈÓ6JØ×)Ñ)¨!Ò,ð.ô /ðˆ rcóx—d}|r9|jdg«}|r%ddj|«z}|jd«}|jd||¬«}|j |«jd«}|j |j «}|r|jdd«rd } nd } |j||||| «y) NrÚinterpreter_argsz %srrg©r>r7FÚpywrˆ)r:r=rmrtrrµr)r¯) r2r~r¢r>r\ÚargsrsÚscriptÚ scriptnamesr£s rÚ _make_scriptzScriptMaker._make_scriptEs´€Øˆ Ù Ø—;‘;Ð1°2Ó6ˆDÙØ˜sŸx™x¨›~Ñ-�Ø"Ÿk™k¨'Ó2� Ø×#Ñ# G¨[À'Ð#ÓJˆØ×&Ñ& uÓ-×4Ñ4°WÓ=ˆØ×/Ñ/°· ± Ó;ˆ Ù �w—{‘{ 5¨%Ô0؉CàˆCØ ×ј;¨°¸ÀCÕHrcó—d}tjj|jt |««}tjj|j tjj |««}|js3|jj||«stjd|«y t|d«}|j«}|stjd|«ytj!|j#dd««}|rd}|j%d«xsd } |sh|r|j+«|jj-||«|j.r|jj1|g«|j3|«ytj5d ||j «|jj(s‡t7|j«\} } |j9d «|j;| «} d vrd } nd} tjj |«} |j=| g| |j?«|| «|r|j+«yy#t&$r|j(s‚d}Y�ŒWwxYw)NFznot copying %s (up-to-date)Úrbz%s is an empty file (skipping)s rYTrrzcopying and adjusting %s -> %srspythonwr¹rˆ) r(r;r=r#r r$r‚r&r.ÚnewerrHr�rDÚreadlinerIÚ FIRST_LINE_REÚmatchr<ÚgrouprGr3ÚcloseÚ copy_filer+ržrŸÚinforÚseekrtr¯rE)r2r»r¢Úadjustr«ÚfÚ first_linerÃr\rqÚlinesrsr£r¬s rÚ _copy_scriptzScriptMaker._copy_scriptUs÷€ØˆÜ—‘—‘˜dŸo™o¬|¸FÓ/CÓDˆÜ—'‘'—,‘,˜tŸ™´·±×0@Ñ0@ÀÓ0HÓIˆØ�zŠz $§,¡,×"4Ñ"4°V¸WÔ"EÜ �L‰LÐ6¸Ô ?Ø ð  4Ü�V˜TÓ"ˆAð Ÿ™›ˆJÙÜ—‘Ð?ÀÔHØä!×'Ñ'¨ ×(:Ñ(:¸7ÀEÓ(JÓKˆEÙØ�Ø#Ÿk™k¨!›nÒ3°‘ áÙØ—‘” Ø �L‰L× "Ñ " 6¨7Ô 3Ø�}Š}Ø— ‘ ×0Ñ0°'°Ô;Ø × Ñ ˜WÕ %ä �K‰KÐ8¸&ØŸ™ô )à—<‘<×'Ò'Ü"1°!·*±*Ó"=‘�˜%Ø—‘�q” Ø×+Ñ+¨H°kÓB�Ø Ñ+Ø‘Cà�CÜ—G‘G×$Ñ$ WÓ-�Ø×"Ñ" A 3¨°·±³¸9ÀcÔJÙØ—‘• ðøôGò Ø—<’<ØØ‹Að úsÂ= I-É-J ÊJ có.—|jjSr�©r.r3)r2s rr3zScriptMaker.dry_runˆs€à�|‰|×#Ñ#Ð#rcó&—||j_yr�rÏ)r2Úvalues rr3zScriptMaker.dry_runŒs€à$ˆ� ‰ Õrr"có—tjd«dk(rd}nd}t«dk(rdnd}|›|›|›d�}tj d d «d }t |«j |«}|sd |›d |›�}t|«‚|jS)NÚPéÚ64Ú32z win-arm64z-armr z.exervrrzUnable to find resource z in package ) ÚstructÚcalcsizerÚ__name__Úrsplitr ÚfindrpÚbytes)r2ÚkindÚbitsÚplatform_suffixr)Údistlib_packageÚresourceÚmsgs rr�zScriptMaker._get_launcher•sˆ€Ü�‰˜sÓ# qÒ(Ø‘à�Ü(4«¸+Ò(E™fÈ2ˆOÙ#'©ªÐ?ˆDô'Ÿo™o¨c°1Ó5°aÑ8ˆOܘoÓ.×3Ñ3°DÓ9ˆHÚâ™oð/�ä  “oÐ%Ø—>‘>Ð !rcót—g}t|«}|€|j||«|S|j|||¬«|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. r¸)r rÍr½)r2Ú specificationr>r¢r~s rÚmakezScriptMaker.make¨sM€ðˆ Ü  Ó/ˆØ ˆ=Ø × Ñ ˜m¨YÔ 7ðÐð × Ñ ˜e Y¸Ð Ô @ØÐrcóZ—g}|D]#}|j|j||««Œ%|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å)r2Úspecificationsr>r¢räs rÚ make_multiplezScriptMaker.make_multiple»s2€ð ˆ Û+ˆMØ × Ñ ˜TŸY™Y }°gÓ>Õ ?ð,àÐr)TFN)rNr�)"rÙÚ __module__Ú __qualname__Ú__doc__ÚSCRIPT_TEMPLATErzrr5rAr0r[rrKrSrartrÚ_DEFAULT_MANIFESTrƒr†r¯r´rµr½rÍÚpropertyr3Úsetterr(r)r*r�råré©rrrrIsá„ñð&€Oà€Jð $ØØó -ò*ð ‡|�|×јvÔ&ò ò 2òó>FòPð !€Hò$ò:&ðxÐò óIò 1ðfñ$óð$ð ‡^�^ñ%óð%ð ‡w�w�$‚˜2Ÿ7™7 fÒ,Ø!Ÿx™x¨4Ò/ò "ó&ô& rr)#ÚiorÚloggingr(Úrer×r0r’ÚzipfilerÚcompatrrrÚ resourcesr Úutilr r r r rrÚ getLoggerrÙrHÚstriprîÚcompilerÂrírÚ_enquote_executableÚobjectrrñrrÚrþsŽðõÛÛ Û Û Û Û Ýç7Ñ7Ý÷:÷:ð ˆ× Ñ ˜8Ó $€ð÷ ‰u‹wð!ð&�— ‘ Ð=Ó>€ ð€ò ð")Ðô{�&õ{r