mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 03:44:55 +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()
 |