mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			88 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import cwxmlgen
 | |
| import cwtalker
 | |
| import os
 | |
| import AppleEvents
 | |
| import macfs
 | |
| 
 | |
| def mkproject(outputfile, modulename, settings, force=0, templatename=None):
 | |
| 	#
 | |
| 	# Copy the dictionary
 | |
| 	#
 | |
| 	dictcopy = {}
 | |
| 	for k, v in settings.items():
 | |
| 		dictcopy[k] = v
 | |
| 	#
 | |
| 	# Fill in mac-specific values
 | |
| 	#
 | |
| 	dictcopy['mac_projectxmlname'] = outputfile + '.xml'
 | |
| 	dictcopy['mac_exportname'] = os.path.split(outputfile)[1] + '.exp'
 | |
| 	if not dictcopy.has_key('mac_outputdir'):
 | |
| 		dictcopy['mac_outputdir'] = ':lib:'
 | |
| 	if not dictcopy.has_key('mac_dllname'):
 | |
| 		dictcopy['mac_dllname'] = modulename + '.ppc.slb'
 | |
| 	if not dictcopy.has_key('mac_targetname'):
 | |
| 		dictcopy['mac_targetname'] = modulename + '.ppc'
 | |
| 	if os.path.isabs(dictcopy['sysprefix']):
 | |
| 		dictcopy['mac_sysprefixtype'] = 'Absolute'
 | |
| 	else:
 | |
| 		dictcopy['mac_sysprefixtype'] = 'Project' # XXX not sure this is right...
 | |
| 	#
 | |
| 	# Generate the XML for the project
 | |
| 	#
 | |
| 	xmlbuilder = cwxmlgen.ProjectBuilder(dictcopy, templatename=templatename)
 | |
| 	xmlbuilder.generate()
 | |
| 	if not force:
 | |
| 		# We do a number of checks and all must succeed before we decide to
 | |
| 		# skip the build-project step:
 | |
| 		# 1. the xml file must exist, and its content equal to what we've generated
 | |
| 		# 2. the project file must exist and be newer than the xml file
 | |
| 		# 3. the .exp file must exist
 | |
| 		if os.path.exists(dictcopy['mac_projectxmlname']):
 | |
| 			fp = open(dictcopy['mac_projectxmlname'])
 | |
| 			data = fp.read()
 | |
| 			fp.close()
 | |
| 			if data == dictcopy["tmp_projectxmldata"]:
 | |
| 				if os.path.exists(outputfile) and \
 | |
| 						os.stat(outputfile)[os.path.ST_MTIME] > os.stat(dictcopy['mac_projectxmlname'])[os.path.ST_MTIME]:
 | |
| 					if os.path.exists(outputfile + '.exp'):
 | |
| 						return
 | |
| 	fp = open(dictcopy['mac_projectxmlname'], "w")
 | |
| 	fp.write(dictcopy["tmp_projectxmldata"])
 | |
| 	fp.close()
 | |
| 	#
 | |
| 	# Generate the export file
 | |
| 	#
 | |
| 	fp = open(outputfile + '.exp', 'w')
 | |
| 	fp.write('init%s\n'%modulename)
 | |
| 	if dictcopy.has_key('extraexportsymbols'):
 | |
| 		for sym in dictcopy['extraexportsymbols']:
 | |
| 			fp.write('%s\n'%sym)
 | |
| 	fp.close()
 | |
| 	#
 | |
| 	# Generate the project from the xml
 | |
| 	#
 | |
| 	makeproject(dictcopy['mac_projectxmlname'], outputfile)
 | |
| 	
 | |
| def makeproject(xmlfile, projectfile):
 | |
| 	cw = cwtalker.MyCodeWarrior(start=1)
 | |
| 	cw.send_timeout = AppleEvents.kNoTimeOut
 | |
| 	xmlfss = macfs.FSSpec(xmlfile)
 | |
| 	prjfss = macfs.FSSpec(projectfile)
 | |
| 	cw.activate()
 | |
| 	cw.my_mkproject(prjfss, xmlfss)
 | |
| 	
 | |
| def buildproject(projectfile):
 | |
| 	cw = cwtalker.MyCodeWarrior(start=1)
 | |
| 	cw.send_timeout = AppleEvents.kNoTimeOut
 | |
| 	prjfss = macfs.FSSpec(projectfile)
 | |
| 	cw.open(prjfss)
 | |
| 	cw.Make_Project()	# XXX Should set target
 | |
| 	cw.Close_Project()
 | |
| 	
 | |
| def cleanproject(projectfile):
 | |
| 	cw = cwtalker.MyCodeWarrior(start=1)
 | |
| 	cw.send_timeout = AppleEvents.kNoTimeOut
 | |
| 	prjfss = macfs.FSSpec(projectfile)
 | |
| 	cw.open(prjfss)
 | |
| 	cw.Remove_Binaries()
 | |
| 		
 | 
