mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			113 lines
		
	
	
	
		
			4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			113 lines
		
	
	
	
		
			4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """macgen_info - Generate CodeWarrior project, config source, resource file"""
 | |
| import EasyDialogs
 | |
| import os
 | |
| import sys
 | |
| import macfs
 | |
| import MacOS
 | |
| import macostools
 | |
| import macgen_rsrc
 | |
| # Note: this depends on being frozen, or on sys.path already being
 | |
| # modified by macmodulefinder.
 | |
| import makeconfig
 | |
| 
 | |
| TEMPLATEDIR=os.path.join(sys.prefix, ':Mac:mwerks:projects:build.macfreeze')
 | |
| PROJECT_TEMPLATE=os.path.join(TEMPLATEDIR, ':frozen.prj')
 | |
| CONFIG_TEMPLATE=os.path.join(TEMPLATEDIR, ':templatefrozenconfig.c')
 | |
| BUNDLE_TEMPLATE=os.path.join(TEMPLATEDIR, ':frozenbundle.rsrc')
 | |
| 
 | |
| def generate(output, module_dict, debug=0, with_ifdef=0):
 | |
| 	problems = 0
 | |
| 	output_created=0
 | |
| 	if not os.path.exists(output):
 | |
| 		print 'Creating project folder', output
 | |
| 		os.mkdir(output)
 | |
| 		output_created = 1
 | |
| 	# Resolve aliases, if needed
 | |
| 	try:
 | |
| 		fss, dummy1, dummy2 = macfs.ResolveAliasFile(output)
 | |
| 	except macfs.error:
 | |
| 		pass
 | |
| 	else:
 | |
| 		newname = fss.as_pathname()
 | |
| 		if newname != output:
 | |
| 			if debug:
 | |
| 				print 'Alias', output
 | |
| 				print 'Resolved to', newname
 | |
| 			output = newname	
 | |
| 	# Construct the filenames
 | |
| 	dummy, outfile = os.path.split(output)
 | |
| 	build, ext = os.path.splitext(outfile)
 | |
| 	if build == 'build' and ext[0] == '.':
 | |
| 		# This is probably a good name for the project
 | |
| 		projname = ext[1:]
 | |
| 	else:
 | |
| 		projname = 'frozenapplet.prj'
 | |
| 	config_name = os.path.join(output, ':macfrozenconfig.c')
 | |
| 	project_name = os.path.join(output, ':' + projname + '.prj')
 | |
| 	resource_name = os.path.join(output, ':frozenmodules.rsrc')
 | |
| 	bundle_name = os.path.join(output, ':frozenbundle.rsrc')
 | |
| 
 | |
| 	# Fill the output folder, if needed.
 | |
| 	if output_created:
 | |
| 		# Create the project, if needed
 | |
| 		if not os.path.exists(project_name):
 | |
| 			print 'Creating project', project_name
 | |
| 			if not os.path.exists(PROJECT_TEMPLATE):
 | |
| 				print '** No template CodeWarrior project found at', PROJECT_TEMPLATE
 | |
| 				print '   To generate standalone Python applications from source you need'
 | |
| 				print '   a full source distribution. Check http://www.cwi.nl/~jack/macpython.html'
 | |
| 				print '   for details.'
 | |
| 				problems = 1
 | |
| 			else:		
 | |
| 				macostools.copy(PROJECT_TEMPLATE, project_name)
 | |
| 				print 'A template CodeWarrior project has been copied to', project_name
 | |
| 				print 'It is up to you to make the following changes:'
 | |
| 				print '- Change the output file name'
 | |
| 				print '- Change the search path, unless the folder is in the python home'
 | |
| 				print '- Add sourcefiles/libraries for any extension modules used'
 | |
| 				print '- Remove unused sources, to speed up the build process'
 | |
| 				print '- Remove unused resource files (like tcl/tk) for a smaller binary'
 | |
| 				problems = 1
 | |
| 				macostools.copy(BUNDLE_TEMPLATE, bundle_name)
 | |
| 				print 'A template bundle file has also been copied to', bundle_name
 | |
| 				print 'You may want to adapt signature, size resource, etc'
 | |
| 
 | |
| 	
 | |
| 	# Create the resource file
 | |
| 	macgen_rsrc.generate(resource_name, module_dict, debug=debug)
 | |
| 	
 | |
| 	# Create the config.c file
 | |
| 	if not os.path.exists(CONFIG_TEMPLATE):
 | |
| 		print '** No template config.c found at', PROJECT_TEMPLATE
 | |
| 		print '   To generate standalone Python applications from source you need'
 | |
| 		print '   a full source distribution. Check http://www.cwi.nl/~jack/macpython.html'
 | |
| 		print '   for details.'
 | |
| 		problems = 1
 | |
| 	else:
 | |
| 		# Find elegible modules (builtins and dynamically loaded modules)
 | |
| 		c_modules = []
 | |
| 		for module in module_dict.keys():
 | |
| 			if module_dict[module].gettype() in ('builtin', 'dynamic'):
 | |
| 				# if the module is in a package we have no choice but
 | |
| 				# to put it at the toplevel in the frozen application.
 | |
| 				if '.' in module:
 | |
| 					module = module.split('.')[-1]
 | |
| 				c_modules.append(module)
 | |
| 		ifp = open(CONFIG_TEMPLATE)
 | |
| 		ofp = open(config_name, 'w')
 | |
| 		makeconfig.makeconfig(ifp, ofp, c_modules, with_ifdef)
 | |
| 		ifp.close()
 | |
| 		ofp.close()
 | |
| 		MacOS.SetCreatorAndType(config_name, 'CWIE', 'TEXT')
 | |
| 	
 | |
| 	if warnings(module_dict):
 | |
| 		problems = 1
 | |
| 	return problems
 | |
| 	
 | |
| def warnings(module_dict):
 | |
| 	problems = 0
 | |
| 	for name, module in module_dict.items():
 | |
| 		if module.gettype() not in ('builtin', 'module', 'dynamic', 'package'):
 | |
| 			problems = problems + 1
 | |
| 			print 'Warning: %s not included: %s %s'%(name, module.gettype(), module)
 | |
| 	return problems
 | 
