mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			104 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
| #! /usr/bin/env python
 | |
| 
 | |
| # XXX This will be replaced by a main program in Mac/Lib/bundlebuilder.py,
 | |
| # but for now this is kept so Jack won't need to change his scripts...
 | |
| 
 | |
| 
 | |
| """\
 | |
| buildappbundle creates an application bundle
 | |
| Usage:
 | |
|   buildappbundle [options] executable
 | |
| Options:
 | |
|   --output o    Output file; default executable with .app appended, short -o
 | |
|   --link        Symlink the executable instead of copying it, short -l
 | |
|   --plist file  Plist file (default: generate one), short -p
 | |
|   --nib file    Main nib file or lproj folder for Cocoa program, short -n
 | |
|   --resource r  Extra resource file to be copied to Resources, short -r
 | |
|   --creator c   4-char creator code (default: '????'), short -c
 | |
|   --verbose     increase verbosity level (default: quiet), short -v
 | |
|   --help        This message, short -? or -h
 | |
| """
 | |
| 
 | |
| 
 | |
| import sys
 | |
| import os
 | |
| import getopt
 | |
| from bundlebuilder import AppBuilder
 | |
| from plistlib import Plist
 | |
| 
 | |
| 
 | |
| def usage():
 | |
| 	print __doc__
 | |
| 	sys.exit(1)
 | |
| 
 | |
| 
 | |
| def main():
 | |
| 	output = None
 | |
| 	symlink = 0
 | |
| 	creator = "????"
 | |
| 	plist = None
 | |
| 	nib = None
 | |
| 	resources = []
 | |
| 	verbosity = 0
 | |
| 	SHORTOPTS = "o:ln:r:p:c:v?h"
 | |
| 	LONGOPTS=("output=", "link", "nib=", "resource=", "plist=", "creator=", "help",
 | |
| 			"verbose")
 | |
| 	try:
 | |
| 		options, args = getopt.getopt(sys.argv[1:], SHORTOPTS, LONGOPTS)
 | |
| 	except getopt.error:
 | |
| 		usage()
 | |
| 	if len(args) != 1:
 | |
| 		usage()
 | |
| 	executable = args[0]
 | |
| 	for opt, arg in options:
 | |
| 		if opt in ('-o', '--output'):
 | |
| 			output = arg
 | |
| 		elif opt in ('-l', '--link'):
 | |
| 			symlink = 1
 | |
| 		elif opt in ('-n', '--nib'):
 | |
| 			nib = arg
 | |
| 		elif opt in ('-r', '--resource'):
 | |
| 			resources.append(arg)
 | |
| 		elif opt in ('-c', '--creator'):
 | |
| 			creator = arg
 | |
| 		elif opt in ('-p', '--plist'):
 | |
| 			plist = arg
 | |
| 		elif opt in ('-v', '--verbose'):
 | |
| 			verbosity += 1
 | |
| 		elif opt in ('-?', '-h', '--help'):
 | |
| 			usage()
 | |
| 	if output is not None:
 | |
| 		builddir, bundlename = os.path.split(output)
 | |
| 	else:
 | |
| 		builddir = os.curdir
 | |
| 		bundlename = None  # will be derived from executable
 | |
| 	if plist is not None:
 | |
| 		plist = Plist.fromFile(plist)
 | |
| 
 | |
| 	builder = AppBuilder(name=bundlename, executable=executable,
 | |
| 		builddir=builddir, creator=creator, plist=plist, resources=resources,
 | |
| 		symlink_exec=symlink, verbosity=verbosity)
 | |
| 
 | |
| 	if nib is not None:
 | |
| 		resources.append(nib)
 | |
| 		nibname, ext = os.path.splitext(os.path.basename(nib))
 | |
| 		if ext == '.lproj':
 | |
| 			# Special case: if the main nib is a .lproj we assum a directory
 | |
| 			# and use the first nib from there. XXX Look: an arbitrary pick ;-)
 | |
| 			files = os.listdir(nib)
 | |
| 			for f in files:
 | |
| 				if f[-4:] == '.nib':
 | |
| 					nibname = os.path.split(f)[1][:-4]
 | |
| 					break
 | |
| 			else:
 | |
| 				nibname = ""
 | |
| 		if nibname:
 | |
| 			builder.plist.NSMainNibFile = nibname
 | |
| 			if not hasattr(builder.plist, "NSPrincipalClass"):
 | |
| 				builder.plist.NSPrincipalClass = "NSApplication"
 | |
| 	builder.setup()
 | |
| 	builder.build()
 | |
| 
 | |
| 
 | |
| if __name__ == '__main__':
 | |
| 	main()
 | 
