mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 10:26:02 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			141 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			141 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """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 written in Python and the main script itself, as __main__.
 | |
| """
 | |
| 
 | |
| 
 | |
| import sys
 | |
| 
 | |
| import string
 | |
| import os
 | |
| import macfs
 | |
| import MacOS
 | |
| from Carbon import Res
 | |
| from Carbon import Dlg
 | |
| import EasyDialogs
 | |
| import buildtools
 | |
| import macresource
 | |
| 
 | |
| # Hmmm...
 | |
| MACFREEZEPATH = os.path.join(sys.prefix, ":Mac:Tools:macfreeze")
 | |
| if MACFREEZEPATH not in sys.path:
 | |
| 	sys.path.append(MACFREEZEPATH)
 | |
| 
 | |
| import macgen_bin
 | |
| 
 | |
| # dialog, items
 | |
| DLG_ID = 400
 | |
| OK_BUTTON = 1
 | |
| CANCEL_BUTTON = 2
 | |
| GENFAT_BUTTON = 4
 | |
| GENPPC_BUTTON = 5
 | |
| GEN68K_BUTTON = 6
 | |
| 
 | |
| # Define this if we cannot generate 68/fat binaries (Python 1.6)
 | |
| PPC_ONLY=1
 | |
| 
 | |
| 
 | |
| macresource.need('DITL', DLG_ID, "BuildApplication.rsrc")
 | |
| 
 | |
| 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]
 | |
| 	else:
 | |
| 		tf = tf + '.app'
 | |
| 	
 | |
| 	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:
 | |
| 			ctl = dlg.GetDialogItemAsControl(item)
 | |
| 			self.items[item] = ctl
 | |
| 	
 | |
| 	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):
 | |
| 	if PPC_ONLY:
 | |
| 		return 'pwpc', 1
 | |
| 	d = Dlg.GetNewDialog(DLG_ID, -1)
 | |
| 	if not d:
 | |
| 		raise "Can't get DLOG resource with id =", DLG_ID
 | |
| 	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()
 | 
