| """Findmodulefiles - Find out where modules are loaded from. | 
 | Run findmodulefiles() after running a program with "python -i". The | 
 | resulting file list can be given to mkfrozenresources or to a | 
 | (non-existent) freeze-like application. | 
 |  | 
 | findmodulefiles will create a file listing all modules and where they have | 
 | been imported from. | 
 |  | 
 | findunusedbuiltins takes a list of (modules, file) and prints all builtin modules | 
 | that are _not_ in the list. The list is created by opening the findmodulefiles | 
 | output, reading it and eval()ing that. | 
 |  | 
 | mkpycresource takes a list of (module, file) and creates a resourcefile with all those | 
 | modules and (optionally) a main module. | 
 | """ | 
 |  | 
 | def findmodulefiles(output=None): | 
 | 	"""Produce a file containing a list of (modulename, filename-or-None) | 
 | 	tuples mapping module names to source files""" | 
 | 	# Immedeately grab the names | 
 | 	import sys | 
 | 	module_names = sys.modules.keys()[:] | 
 | 	import os | 
 | 	if not output: | 
 | 		if os.name == 'mac': | 
 | 			import macfs | 
 | 			 | 
 | 			output, ok = macfs.StandardPutFile('Module file listing output:') | 
 | 			if not ok: sys.exit(0) | 
 | 			output = output.as_pathname() | 
 | 	if not output: | 
 | 		output = sys.stdout | 
 | 	elif type(output) == type(''): | 
 | 		output = open(output, 'w') | 
 | 	output.write('[\n') | 
 | 	for name in module_names: | 
 | 		try: | 
 | 			source = sys.modules[name].__file__ | 
 | 		except AttributeError: | 
 | 			source = None | 
 | 		else: | 
 | 			source = `source` | 
 | 		output.write('\t(%s,\t%s),\n' % (`name`, source)) | 
 | 	output.write(']\n') | 
 | 	del output | 
 | 	 | 
 | def findunusedbuiltins(list): | 
 | 	"""Produce (on stdout) a list of unused builtin modules""" | 
 | 	import sys | 
 | 	dict = {} | 
 | 	for name, location in list: | 
 | 		if location == None: | 
 | 			dict[name] = 1 | 
 | 	for name in sys.builtin_module_names: | 
 | 		if not dict.has_key(name): | 
 | 			print 'Unused builtin module:', name | 
 | 			 | 
 |  | 
 | def mkpycresourcefile(list, main='', dst=None): | 
 | 	"""Copy list-of-modules to resource file dst.""" | 
 | 	import py_resource | 
 | 	from Carbon import Res | 
 | 	import sys | 
 | 	 | 
 | 	if dst == None: | 
 | 		import macfs | 
 | 		fss, ok = macfs.StandardPutFile("PYC Resource output file") | 
 | 		if not ok: sys.exit(0) | 
 | 		dst = fss.as_pathname() | 
 | 	if main == '': | 
 | 		import macfs | 
 | 		fss, ok = macfs.PromptGetFile("Main program:", "TEXT") | 
 | 		if ok: | 
 | 			main = fss.as_pathname() | 
 | 	 | 
 | 	fsid = py_resource.create(dst) | 
 |  | 
 | 	if main: | 
 | 		id, name = py_resource.frompyfile(main, '__main__', preload=1) | 
 | 		print '%5d\t%s\t%s'%(id, name, main) | 
 | 	for name, location in list: | 
 | 		if not location: continue | 
 | 		if location[-4:] == '.pyc': | 
 | 			# Attempt corresponding .py | 
 | 			location = location[:-1] | 
 | 		if location[-3:] != '.py': | 
 | 			print '*** skipping', location | 
 | 			continue | 
 | 		id, name = py_resource.frompyfile(location, name, preload=1) | 
 | 		print '%5d\t%s\t%s'%(id, name, location) | 
 |  | 
 | 	Res.CloseResFile(fsid) | 
 |  | 
 | 			 |