mirror of https://github.com/python/cpython.git
Build a full standalone application from a python script (Just)
This commit is contained in:
parent
015b70ec93
commit
b44f1cca6c
|
@ -0,0 +1,145 @@
|
|||
"""Create a standalone application from a Python script.
|
||||
|
||||
This puts up a dialog asking for a Python source file ('TEXT').
|
||||
The output is a file with the same name but its ".py" suffix dropped.
|
||||
It is created by copying an applet template, all used shared libs and
|
||||
then adding 'PYC ' resources containing compiled versions of all used
|
||||
modules wirrten in Python and the main script itself, as __main__.
|
||||
"""
|
||||
|
||||
|
||||
import sys
|
||||
|
||||
import string
|
||||
import os
|
||||
import macfs
|
||||
import MacOS
|
||||
import Res
|
||||
import Dlg
|
||||
import EasyDialogs
|
||||
import buildtools
|
||||
|
||||
# Hmmm...
|
||||
MACFREEZEPATH = os.path.join(sys.prefix, ":Mac:Tools:macfreeze")
|
||||
if MACFREEZEPATH not in sys.path:
|
||||
sys.path.append(MACFREEZEPATH)
|
||||
|
||||
import macmodulefinder
|
||||
import macgen_bin
|
||||
|
||||
# dialog, items
|
||||
DLG_ID = 400
|
||||
OK_BUTTON = 1
|
||||
CANCEL_BUTTON = 2
|
||||
GENFAT_BUTTON = 4
|
||||
GENPPC_BUTTON = 5
|
||||
GEN68K_BUTTON = 6
|
||||
|
||||
|
||||
try:
|
||||
Res.GetResource('DITL', DLG_ID)
|
||||
except Res.Error:
|
||||
Res.OpenResFile("BuildApplication.rsrc")
|
||||
else:
|
||||
pass # we're an applet
|
||||
|
||||
|
||||
def main():
|
||||
try:
|
||||
buildapplication()
|
||||
except buildtools.BuildError, detail:
|
||||
EasyDialogs.Message(detail)
|
||||
|
||||
|
||||
def buildapplication(debug = 0):
|
||||
buildtools.DEBUG = debug
|
||||
|
||||
# Ask for source text if not specified in sys.argv[1:]
|
||||
|
||||
if not sys.argv[1:]:
|
||||
srcfss, ok = macfs.PromptGetFile('Select Python source:', 'TEXT')
|
||||
if not ok:
|
||||
return
|
||||
filename = srcfss.as_pathname()
|
||||
else:
|
||||
if sys.argv[2:]:
|
||||
raise buildtools.BuildError, "please select one file at a time"
|
||||
filename = sys.argv[1]
|
||||
tp, tf = os.path.split(filename)
|
||||
|
||||
# interact with user
|
||||
architecture, ok = interact(tf)
|
||||
if not ok:
|
||||
return
|
||||
if tf[-3:] == '.py':
|
||||
tf = tf[:-3]
|
||||
logfile = tf[:-3] + '.log'
|
||||
else:
|
||||
tf = tf + '.app'
|
||||
logfile = tf + '.log'
|
||||
|
||||
dstfss, ok = macfs.StandardPutFile('Save application as:', tf)
|
||||
if not ok:
|
||||
return
|
||||
dstfilename = dstfss.as_pathname()
|
||||
|
||||
macgen_bin.generate(filename, dstfilename, None, architecture, 1)
|
||||
|
||||
|
||||
class radio:
|
||||
|
||||
def __init__(self, dlg, *items):
|
||||
self.items = {}
|
||||
for item in items:
|
||||
tp, h, rect = dlg.GetDialogItem(item)
|
||||
self.items[item] = h.as_Control()
|
||||
|
||||
def set(self, setitem):
|
||||
for item, ctl in self.items.items():
|
||||
if item == setitem:
|
||||
ctl.SetControlValue(1)
|
||||
else:
|
||||
ctl.SetControlValue(0)
|
||||
|
||||
def get(self):
|
||||
for item, ctl in self.items.items():
|
||||
if ctl.GetControlValue():
|
||||
return item
|
||||
|
||||
def hasitem(self, item):
|
||||
return self.items.has_key(item)
|
||||
|
||||
|
||||
def interact(scriptname):
|
||||
d = Dlg.GetNewDialog(DLG_ID, -1)
|
||||
if not d:
|
||||
print "Can't get DLOG resource with id =", DLG_ID
|
||||
return
|
||||
d.SetDialogDefaultItem(OK_BUTTON)
|
||||
d.SetDialogCancelItem(CANCEL_BUTTON)
|
||||
Dlg.ParamText(scriptname, "", "", "")
|
||||
|
||||
radiogroup = radio(d, GENFAT_BUTTON, GENPPC_BUTTON, GEN68K_BUTTON)
|
||||
radiogroup.set(GENFAT_BUTTON)
|
||||
|
||||
gentype = 'fat'
|
||||
while 1:
|
||||
n = Dlg.ModalDialog(None)
|
||||
if n == OK_BUTTON or n == CANCEL_BUTTON:
|
||||
break
|
||||
elif radiogroup.hasitem(n):
|
||||
radiogroup.set(n)
|
||||
genitem = radiogroup.get()
|
||||
del radiogroup
|
||||
del d
|
||||
if genitem == GENFAT_BUTTON:
|
||||
gentype = 'fat'
|
||||
elif genitem == GENPPC_BUTTON:
|
||||
gentype = 'pwpc'
|
||||
elif genitem == GEN68K_BUTTON:
|
||||
gentype = 'm68k'
|
||||
return gentype, n == OK_BUTTON
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
|
@ -0,0 +1,44 @@
|
|||
(This file must be converted with BinHex 4.0)
|
||||
|
||||
:&8*eD@aN3A"`E'PMBA4TEfiZFR0bB`"bFh*M8P0&4!%!N!F-R2!m!*!%!3!!!!Y
|
||||
(!!!+4`!!!98f&#"8)'J!&#"3I4'`D"%!1J&R*K)[$%kk!J`-1J"DH49#G@PXC%&
|
||||
`F'aTBf&dD@pZ,R*cFQ-#!!!!8'&bG&0*!!"3BA*d8dP8)3#3',(QTJ-!N!B-R2m
|
||||
4`+KT!4e!%Irc%h!!%#lrmlh5%@B386Dq9@X"!8*%[D'q9@X"!6"4-J&R(N39$!!
|
||||
!('85F!!3,N-9$!!!(f)'F!&J!!%"!LaD9#dZ4,d"!"Xm!@B`*e8q'NU!)&-#+!#
|
||||
r!#iL!1d*!J%!3)-Sfc36UGF[$%kk!3P+CfX"!+CA3cS!!!%!N!Y!!!!!S!!!!9!
|
||||
!!!+S!!!%9!!!#53!!"+8!!2rr`!%!!#!!rrr!!%!!J!"!!)!!3!$!!%!!q!"!!-
|
||||
J!3!#)!%!!L!$rrmZ"!!![J2rr`i!V!3!!Di)!!(q%!!!%#!!!!K!!!!%J!!!!`#
|
||||
3'%!!!!$J!!!"m!!!!rJ!!!Im!!!2r!!!(r`!!rrr!!Irri!$rrm!!Irq!!(rrJ!
|
||||
"rrm!!Irri!(rrb!"rriJ!Irq)!2rrbi(rrqq!rrr$J$rr!!"rrJ!!Ir`!!!Ii!!
|
||||
!$m!!!!H!!!!$!*!4#P$J!"k%J!!(S5!!!!"!!!!"!!+!"8!)3$ri%"!3(K!5%"-
|
||||
rq`iJ$N!#J!%!N!8"!!1!"m!2`$ri(r!IrKrb(r-rq`rJ$m!$J!%!N!8%!*"5r`#
|
||||
3([m!r`#3(2m!X!$r!*!Dr`#`!,!!r`#3'2m!!!#`!2m&r`#3&[m!!,!!!2m&"Im
|
||||
!N"Ar!!#`!,!!!2m&r`#3%2q3%J#3$Im!!#X!+j!+q5[jqIm!N!hrN")!N!rr!!!
|
||||
VN!VjqIm!N"$r!!!!+j!)qIRjr`#3%2m!!#Z3#[Rjrrm!N!rr!!!!+j!)qIRjrj!
|
||||
&!*!-r`!!+j!+qIRrr`!!r`#3$2m!!!!VN!MjqIRr!!!!r`#3$2m!!#Z3#[Rjr`!
|
||||
!!2m!N![rN")!!2m!APjH!*!'r`!!+`!VN!Vj+rRjr`$rrejHAJ#3"rq3%J#3"&j
|
||||
HAJ#3#E!&X!@`X2NVN!Ajr`#3%E#`"E!&X,#`q5XV+rRr!*!5X*!)q5XVqIm!N"I
|
||||
rqC!%+rRr!*!CrrNV+rRr!*!ErrRjr`#3(Irr!*"b!J#3+3m!N!r`m!#3$3m&$`#
|
||||
3$I"382!!N!X2!!82(`#3#r!&!2%I!*!+$`"38!mI!*!)rj!*!*!'$`$!c*!&h0h
|
||||
`!*!'rj!*!*!($`$-N!AGm!#3"`m!$-c-c-hGm!#3"`m!c*!&hIm!N!F2!!c-c-c
|
||||
0hIrrm!#3"3m!c*!&hIm!m!#3"3m!$-c-c-hGm!$`!*!&$`$-N!AGm!$`!*!&rj!
|
||||
*!2#lX!!!$`$!c*!&h0h`rlZ`!!!!rj!*!!#lX!#3"&&49Gc-c0m!N!J&89&9AFc
|
||||
0m!#3#!99999Gc0m!N!X2hGh0m!#3$2h-h`#3$3rGm!#3$[m!N$S"!*!Br`#3$[m
|
||||
!r`#3$2m!X!$r!*!+r`#3"2m&!*!(rj!,!*!'r`!VN!Ajr`#3"rm!+j!&qIq3"!#
|
||||
3"2m!+j!&qIm!!2m!N!6r!#Z3"IRr!!"HAJ!!rj!,!&jH!*!%X,#`+b[jr`#3#E#
|
||||
`X#[jr`#3$2rjr`#3$[m!N"Z!!*!,$`#3"r$`!*!&$`82!*!&m!!2%!!!!2q3"I!
|
||||
!!!m-c-cI!!!!$`c-c0rrm!!2$-c-h`$`!!m-c-cI!,X!rj!&m,X!!&9FcI!!N!4
|
||||
9A0m!N!Epm!#3"Jm!N!m(9%9B9!!"!*!%!3#3"#a3HA3a!!!!!8C548B!!J!!!)!
|
||||
!!3#"!!)!JNP$6L-!!J!!!5`!!3!!!!)!N!839%9B9(4dH(3!U$!a1$%!N!8+81!
|
||||
!G5`!!"k%!*!%#P$J!(8X!!!(S5!!!!!B!$i!@3$+!F%!!3%!!3#3"3'3!!!!-!S
|
||||
!!!!(39"36!#3"XB!"3#3"@i"$J##!9i%"8*eD@aN!*!'EJ#d!))""!3'3f&ZBf9
|
||||
X!*!&#J!+!"S"ASJL3R9TE'3JBA"`E'PMBA4TEfiJCR*[E5"cBh*TF(3JdPi`d`#
|
||||
3"5J!#J!k!+S'&8*eD@aN)%CKG#"KF("XD@0KG'P[EJ#3"M`!#J"1!+S'&8*eD@a
|
||||
N)&"33b"KF("XD@0KG'P[EJ#3"P!!#J"L!+S'&8*eD@aN)$BiDb"KF("XD@0KG'P
|
||||
[EJ!!!!%!!!!,4`!!#NF!!!&9"TEYf#Zd!!!!(!&'!!a#6N4-!!!!DNP$6L-!!!"
|
||||
f8dPD43!#!)*'8N9'!!%!TQPMFb-!!!#qD@0X1!!!!-TTBf`d!!!!eQPMFcJ!!!$
|
||||
LD@0c0!!!!1j3HA3a!!!!qNG9YdN!!!%'4%P86!!!!4*%6%p(!!!"(J#!rrm!!!M
|
||||
f!*!%!5crr`#3#2q3"!!!!33'PaCm!!(rr`!!#6S'PaD-!!$rr`!!#8J'PaD!!)(
|
||||
rr`!!#1B!N!@!rrm!!!Pb!*!%!5crr`!!!4)!N!3",2rr!!!"9J#3"!%Xrrm!!!9
|
||||
D!*!%!5crr`!!"ei!N!3",2rr!!!)BJ#3#JMa!*!%+!(rr`!!#5B!N!3"N!$rr`!
|
||||
!#Ad!N!3"N!$rr`!!#9B!N!316hGZCA)JFQ9cEh9bBf@q-J:
|
Loading…
Reference in New Issue